像素(Pixel) - 磅(Point) - 緹(Twips)


在 Windows 程序設計中,坐標的單位有很多種。

一種是我們最為熟悉的像素(Pixel),像素代表的是物理的坐標,比如我們常說的 640x480、800x600 指的就是像素。

另外比較重要的就是磅(Point)了,它是一種邏輯坐標,原是打印單位,約為 1/72 英寸,在 Windows中被確定的定義為 1/72 英寸。

還有一種比較重要的是緹(Twips),VB 缺省情況下就是使用緹作為它的單位的,20 緹等於 1 磅,所以 1 緹就是 1/1440 英寸。

另外還有幾種單位,代表厘米、毫米之類的邏輯單位,我在這里就不說了。

因為 Windows 其實不知道我們的顯示器的大小,所以是通過我們的設置來標示英寸的大小的。好的,我們再來看一下 Windows 中關於字號的設置。

在顯示屬性對話框里可以設置字體的大小,不過只有兩種設置,一種是小字體,另一種是大字體。其中小字體表示 96dpi,而大字體表示 120dpi。小字體是缺省選項,而大字體是在用戶所選的屏幕分辨率太大(如 1600x1200)時,為了避免字體太小看不清楚而選擇使用的。另外,用戶也可以自己設置字體的分辨率,不過值就不一定是多少了。

我們常說的“宋體,9”,表示的單位其實是磅,也就是 9 磅的宋體。

我們來換算一下。在小字體的時候,分辨率是 96dpi,也就是說一英寸能顯示 96 個像素;9 磅是 1/8 英寸,所以 96/8=12 像素。也就是說,我們通常見到的字體就是這種 12x12 點陣的字體了。

另外,在大字體的時候,分辨率是 120dpi,9 磅是 1/8 英寸,所以 120/8=15 ,就是說大字體時,顯示的 9 磅字體其實是 15x15 點陣的字體。

在 VB、VC 或 Delphi 里,對於窗體設置字體后,窗體的大小會自動隨用戶所選擇的是大字體還是小字體而自動調整窗體的大小,這一點就是因為它們使用了邏輯單位。缺省情況下,對於 VB 來說是緹,對於 VC 和 Delphi 來說是磅。

 

 

最近一直在對cocos2d-x中的一些基礎概念進行理解,一開始便對point尺寸和pixel尺寸之間的關系很模糊,於是在網上找了一下資料,並整理了自己現在的理解,如有什么理解錯誤的地方請大家指點一下,在這里先謝謝大家了!!
大家都知道:point構成了紙上的一幅圖像,而pixel則是構成顯示器上圖像的基本單位,要將畫好的一幅圖像在顯示器上顯示出來就得做好point和pixel之間的映射,通俗點說就是紙上的一個point在顯示器上需要幾個pixel繪制才能繪制出來。
將point和pixel看作單位長度,用一個式子表示上面的關系就是: point <=對應但不一定相等=> pixel * n
現在試想,我們將一幅以point為分辨率單位,大小為resolutionInPointsX * resolutionInPointsY的2D圖像在顯示器中顯示出來,此時它的point分辨率大小並未發生改變,只是point單位本身發生了伸縮。其中以pixel為分辨率單位的顯示器大小為resolutionInPixelsX * resolutionInPixelsY。
由於圖像在顯示器中顯示出來了,圖像大小與顯示器大小相等,則有:point = pixel * n (注意:這里變成了等號)
有了上面的等式我們就可以得出:width = resolutionInPointsX * pointX = resolutionInPointsX * nx * pixelX ----- a
height = resolutionInPointsY * pointX = resolutionInPointsY * ny * pixelX ----- b
且:width = resolutionInPixelsX * pixelX ----- c
height = resolutionInPixelsY * pixelX ----- d
其中pointX,pointY為point在x,y軸方向上的尺寸,pixelX,pixelY為pixel在x,y軸上的尺寸。
由式子a和c,b和d可以得出顯示器中pixel分辨率大小和point分辨率大小之間的對應關系如下:
resolutionInPixelsX = resolutionInPointsX * nx
resolutionInPixelsY = resolutionInPointsY * ny
故當我們知道point尺寸時,還需要乘以一個對應的縮放因子才能得到對應的pixel尺寸,即
sizeInPixelsX = sizeInPointsX * nx
sizeInPixelsY = sizeInPointsY * ny
由於一開始我們已經知道設計尺寸resolutionInPointsX * resolutionInPointsY和顯示器分辨率resolutionInPixelsX * resolutionInPixelsY,不難直接求出
nx = resolutionInPixelsX / resolutionInPointsX
ny = resolutionInPixelsY / resolutionInPointsY


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM