windows - PixelOffsetModeHighSpeed 和 PixelOffsetModeHighQuality 背后的动机是什么?
问题描述
我在 C# 中做了很多手动 GDI+ 绘图,总是对 GDI+ 默认使用的明显 (0.5, 0.5) 像素偏移感到恼火(我的想法更符合 IMO 更简单的 (0, 0) 定义为上左上角像素的左角)。直到最近,我还认为让事情变得“更容易”“”可能只是一个愚蠢的 .NET 事情——我只是在做任何其他事情之前翻译了 (-0.5, -0.5)。直到我偶然发现了PixelOffsetMode
枚举。
typedef enum {
PixelOffsetModeInvalid = QualityModeInvalid,
PixelOffsetModeDefault = QualityModeDefault,
PixelOffsetModeHighSpeed = QualityModeLow,
PixelOffsetModeHighQuality = QualityModeHigh,
PixelOffsetModeNone = QualityModeHigh + 1,
PixelOffsetModeHalf = QualityModeHigh + 2
} PixelOffsetMode;
似乎“关闭(0.5,0.5)”是故意的GDI +事情。
SO上也有这两个答案:
在 .Net、WinForms 中寻找有关 PixelOffsetMode 枚举的详细信息
后一个问题的答案似乎也有点不正确。HighSpeed
and Half
(是将原点放在左上像素的左上角的模式,HighSpeed
and (将原点放在左上像素的中心)没有区别None
。C API枚举的文档定义甚至证实了这一点。
最让我烦恼的是,即使其中两个选项包含“速度”和“质量”这两个词,您选择的值与速度或质量完全无关,它只是用于绘图的坐标系的不同定义. 两者都可以以完全相同的速度产生完全相同的结果。在实践中,这是非常模糊的,知道原点的精确位置对于编写正确的绘图代码至关重要——“质量”或“速度”等模糊的术语在这里没有帮助。使用不正确的枚举值不会使绘图变慢或质量低下,它只会使它出错。
HighQuality
然而,在开发 GDI+ 时一定有人提出了这些枚举值,并且可能已经想到了存在和存在的理由HighSpeed
。我想知道这个原因——也许有细微的差别,或者曾经有过差别,但现在已经不相关了。
解决方案
我不知道动机,但我可以猜测。
GDI 是非常古老的 API,并且出现在 Windows 2000 中。该操作系统的推荐硬件要求是 Pentium II 300MHz,128 MB RAM,最低为 Pentium 133 MHz,32MB RAM。按照今天的标准,这是非常慢的硬件。很可能,这就是为什么您在现代 Windows PC 上没有观察到渲染速度的任何差异的原因。
推荐阅读
- python - 下载 PyQt5 和 Pytube 时 GUI 冻结
- powerbi - Power BI M Query - 从 Web 获取数据时出现错误
- amazon-s3 - 为 s3 ninja(aws s3 模拟器)设置 AWS CLI
- python - learning_curve 没有交叉验证
- random - 如何根据jmeter中的随机选择来选择值?
- python - Python Second for 循环只循环一次
- apache-flink - 公开在同一主机上运行的多个任务管理器指标
- tcl - 如何搜索反斜杠的数量
- python - 当值完全在字符串格式中时,如何将 json 转换为 pandas 数据帧
- java - 如何在Java中获取当前登录用户的窗口