小甲鱼 发表于 2014-10-8 23:28:14

第018讲:设备的尺寸1(课文解读)

以下解读来自《Windows 程序设计》(第5版 珍藏版)P108 ~ 110


假定你想绘制一个边长是 1 英寸的正方形。为了完成这个正方形,或者你(程序员)或者 Windows(操作系统)需要知道在视频显示器上的 1 英寸对应的像素数目。使用 GetDeviceCaps 函数可以帮助你获取有关输出设备(如视频显示器和打印机)的物理尺寸信息。

视频显示器和打印机是两种非常不同的设备,但是最不明显的区别或许是“分辨率”和设备联系起来的方式。使用打印机时,分辨率通常用每英寸的点数表示。例如有的激光打印机分辨率是每英寸 300 点或者 600 点。但是,视频显示器的分辨率却是以水平和垂直方向上显示的总的像素数给出的,如 1024 * 768。

小甲鱼解释:人们不可能告诉你打印机的一页纸上横向或者纵向的像素数量;人们也不可能告诉你在他们的显示器上,每英寸能包含多少像素!

打印机:分辨率单位为“点/英寸”;

显示器:分辨率单位为“横向 * 纵向总像素数”

在下文中,“分辨率”一词被严格地定义为某一度量单位内的像素数,度量单位一般为英寸(也就是:像素数/英寸)。我们将使用“像素尺寸”(Pixel Size)或者“像素规模”(Pixel Dimension)来表示显示器横向、纵向的总像素数量。“度量尺寸”(Metrical Size)或者“度量规模”(Metrical Dimension)表示以英寸或者毫米为单位的显示区域(如显示器的屏幕,打印机的纸张的可打印区域)的尺寸。使用“像素数量”/“度量尺寸”就得到了分辨率。

小甲鱼解释:上边啰啰嗦嗦说这么多,就只是在告诉你显示器和打印机的分辨率不是同一回事!

当今使用 Windows 操作系统的显示器,横向长度要比纵向多出 33% 的,也就是横向、纵向比为 1.33:1,或者更通俗的讲是 4:3,该比例可以追溯到爱迪生发明电影,直到 1953 年出现宽屏投影出现为止,该比例一直是显示移动图像的标注比例。电视机也是 4:3 的横向、纵向比。

小甲鱼解释:嗯嗯,现在越来越往扁平化发展了,16:9,16:10 已经成为新的行业标准~

然而 Windows 应用程序不该假定显示器总是拥有 4:3 的横纵比,做文字处理的人们更倾向于选择一款与真实纸张形状相似的显示器。除了 4:3 比例外,另外一种可选的比例是 3:4。

小甲鱼解释:对头,很多程序猿都喜欢拿几块屏幕拼在一起,左边竖放 Coding...右边横放 LOL~,

如果一款设备的横向分辨率等于纵向分辨率,那么我们就称该设备为“正方像素”,在现如今,使用 Windows 操作系统的大多数显示器均具备正方像素,但是并不是全都如此。所以你的应用程序不能总是假定设备具备正方像素。当windows刚刚面世的时候(那时候就不是正方像素),标准的视频适配卡(显卡)是 IBM 的 Color Graphics Adapter(CGA),该显卡具备显示640×200像素的能力,EGA 显卡:640×350 像素;还有诸如 720×348 像素;所有的显卡均使用4:3纵横比的显示器,但是横向、纵向的像素数量之比并不是 4:3。如,640×350,横纵比为:1.829。物理屏幕为 4:3,但是像素比却不为 4:3,那么就不是正方像素了。

小甲鱼解释:历史课......看过就好......

Windows 应用程序可以通过在调用 GetSystemMetrics 函数时使用 SM_CXSCREEN 和 SM_CYSCREEN 参数来获取显示器的像素规模。从 DEVCAPS1 程序可以看出来,一个程序可以在调用 GetDeviceCaps 函数时使用 HORZRES(水平分辨率)和 VERTRES(垂直分辨率)来获取相同的值(在 HORZRES 中“分辨率”指的是像素尺寸,而不是每度量单位的像素数)。

小甲鱼解释:再一次强调,不要去猜数据,尽量让 Windows 告诉你所需要的数据值。


WinSDK

大个的糖果 发表于 2014-11-1 08:03:54

windowsapi 发表于 2016-4-30 16:20:46

这段还算是正常人 能看懂的{:10_245:}

羽枫 发表于 2017-3-10 10:28:00

感觉这个扩展阅读跟课堂内容无关呢{:10_281:}
页: [1]
查看完整版本: 第018讲:设备的尺寸1(课文解读)