当前位置: 首页 > news >正文

为什么图标的宽度总是8的倍数?

对于 Windows 上的所有图标而言,它的宽度总是8的倍数,这可不是因为人们喜欢2的幂,虽然在计算机世界,你会看到很多这样的数字,例如,1024,4096等。

在 Windows 的早期阶段,大多数显卡是单色的,如果幸运的话,可能会有一张16色的显卡。它们运作在平面视频模式(planar video mode)。现在我们想象一下,将一张位图拷贝到屏幕上,这张位图和屏幕都是平面化的。
如果目标矩形的起始坐标刚好8的倍数,则位图可以通过块拷贝指令进行复制。换句话说,如果目标矩形的坐标不是8的倍数,则你需要做很多复杂的工作来对位图进行移动,从而显示到屏幕上。

这就是窗口风格 CS_BYTEALIGNCLIENT 被创建出来的原因。当把这个风格设置到窗口上时,窗口管理器将尝试定位窗口,以便客户端矩形左上角的 X 坐标位于视频内存的完美字节边界。

如果你以 1bpp 视频模式(单色或 16 色)运行,这意味着 x 坐标是 8 的倍数。通过以这种方式定位窗口,复制到客户端矩形左上角的位图将通过快速块传输指令进行复制。

如果你查看 Windows 95 或更早版本的对话框尺寸,你会发现它们的宽度几乎总是 32 个 DLU 的倍数。由于四个水平 DLU 等于一个平均字符宽度,因此你必须将对话框宽度保持为 32 的倍数,以确保最终对话框大小是 8 的倍数。

保持位图宽度以表示确切的字节边界对于当今机器的性能非常重要。复制周围的像素块通常分三个主要步骤执行:从位图左边缘到第一个字节边界的细垂直条带,然后是位图的大部分到最后一个字节边界,最后是从最后一个字节边界到右边缘的细垂直条带。如果你睁大眼睛,你实际上可以看到这三个阶段的绘画正在发生。(就像我说的,当时的机器并没有那么快。)保持字节对齐和字节宽度意味着两个细的垂直条带的宽度为零,因此可以优化出来。

当然,在当今 32bpp 显示器的世界中,所有这些旧的设计考虑在很大程度上都是无关紧要的。

总结

最近我确实在做一些和位图有关的研究,相比上古时代的单色或16色位图,32bpp(32位的位图)在处理起来,确实十分方便和直观。你可以在脑海你直接呈现位图,不需要考虑颜色板,压缩格式等这些劳什子。
对于数学一窍不通的我来说,属实是救星一枚。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Why are icons multiples of 8 pixels in width?》

 

http://www.lryc.cn/news/23156.html

相关文章:

  • 常用的xpath
  • 【035】基于java的进销库存管理系统(Vue+Springboot+Mysql)前后端分离项目,附万字课设论文
  • 【Spark分布式内存计算框架——Spark Streaming】7. Kafka集成方式
  • 如何引入elementUI
  • vue3+rust个人博客建站日记4-Vditor搞定MarkDown
  • KDZD-JC软化击穿试验仪
  • 【数据结构】单链表的C语言实现--万字详解介绍
  • 电子科技大学软件工程期末复习笔记(七):测试策略
  • 逆向-还原代码之除法 (Interl 64)
  • Python WebDriver自动化测试
  • 2023年微信小程序获取手机号授权登录注册详细教程,包含服务端教程
  • YOLOv8模型学习笔记
  • Java SE知识点1
  • 华为OD机试模拟题 用 C++ 实现 - 端口合并(2023.Q1)
  • C++ Primer Plus 第6版 读书笔记(3) 第3章 处理数据
  • ArrayList源码解读
  • python实战应用讲解-【语法高级篇】时间与日期(附python示例代码)
  • D. Moscow Gorillas(双指针 + 区间分析)
  • 华为OD机试题,用 Java 解【相同数字的积木游戏 1】问题
  • Python实现GWO智能灰狼优化算法优化BP神经网络分类模型(BP神经网络分类算法)项目实战
  • 无线蓝牙耳机哪个牌子好?2023质量好的无线蓝牙耳机推荐
  • Qt之QTableView自定义排序/过滤(QSortFilterProxyModel实现,含源码+注释)
  • 电商(强一致性系统)的场景设计
  • 算法与数据结构(一)
  • 【Python】元组如何创建?
  • qt操作文件以及字符串转换
  • 数组中只出现一次的两个数字(异或法思路)
  • python支持的操作系统有哪些
  • S3C2440开发环境搭建
  • 软件测试之测试用例