上篇說了屏幕的文本顯示原理:ASCII編碼。計算機内部文字其實是排列組合的數組,屏幕就是打印出來相關數組地址裡的文字。那本期就認識屏幕是如何顯示的,不僅僅是文字,還有圖像圖片圖形。
RGB這個概念大家都懂,紅綠藍三原色嘛。三個原色混合,可以獲取成百上千種顔色。那就容易了不是,如果我們想讓一個方塊變化顔色,簡單啊,用三原色混呗。下面這個圖自己看。如何顯示一副圖像呢,用紅綠藍的小像素混合成一個大像素,表示一張圖的話需要很多大像素,這就是分辨率,很容易理解是吧。那讓圖像動起來咋辦?就每秒刷新24張不同的圖片,快速PPT,通過人眼暫留達到動态效果,這就是刷新率,也很容易理解對吧?
那屏幕驅動的工作,就是讓幾百萬個像素,通過RGB變化不停實現顔色變化。計算機發送顯示指令,每個區的像素可以幾乎同一時間顯示不同的内容。但是還是不讨論太複雜的問題。我們去認識計算機裡屏幕的所有圖形顯示。
坐标的概念大家都懂。windows體系下,例如經典的CMD界面,或者說DOS界面,純黑界面,屏幕坐标是從左上方開始的,地位為(0,0)。右邊地址就是(0,1),下邊地址就是(1,0)。因為屏幕其實是個2D顯示,坐标系隻有縱橫軸。這是隻有一層窗口平鋪的簡單設計。
windows體系下,每個像素用坐标表示,這個誰都理解。每個像素的顔色呢,用紅綠藍三原色的不同亮度表示,給固定的數字,每個顔色從0到255表示總共是256個位。那就容易了,白色就是三原色默認值嘛,表示為(0,0,0),或者用16進制表示為#FFFFFF,因為一般的驅動都是用16進制表示數的,沒别的理由,習慣罷了。那純黑色很容易理解,RGB(0,0,0),三原色亮度都是0,那就是黑,對吧。
RGB(255,0,0)就是紅,RGB(0,255,0)就是綠,這都很容易理解。這個知識就過了吧。
win的每個像素顯示顔色,而顔色組合,形成界面。每個任務運行在單獨的窗口下,win體系是這樣。塞班系統隻有全屏幕,安卓可以根據指定分辨率全屏,這倆系統都不能拖動窗口。win因為是為大屏幕設計,窗口套窗口,就很直觀。
而層層疊疊的窗口,跟全屏沒别的窗口,還是不一樣的,複雜一些。win體系,就在坐标系上動腦筋,在性能損失小的前提下實現了多層窗口界面。
反正,程序裡的圖形變化,都是以窗口坐标為基準。你拖動框體,是windows系統的功勞。程序顯示隻要關心你相對屏幕左上角的坐标位置就好了。程序框架内顯示,隻要計算屏幕坐标 距離框架的位置,刷新時候,坐标 固定數字就可以了。就算三層,5層套在一起,都是簡單的加減法計算。繪圖,就是顯示卡的負擔了。這種硬件剝離,讓windows在90年代,2000年代初,對各種老式服務器,遊戲機的概念,具備碾壓性優勢。
win的坐标系三層,分别是Client Coordinate就是你操作的界面坐标,Form Coordinate,就是你拖動的框架坐标,Screen Coordinate就是屏幕左上角開始的坐标。通過這一套設計,win的框架内,鼠标拖拖動動基本都是簡單的加減法計算,基本不依賴CPU,可謂異常節省性能。以至于,程序員基本不考慮拖框體這些優化。所以,本期看看就好,了解就好,編程根本用不到。
至于縮放分辨率,那是win另外的絕活了,90年代就做到了如此,可謂良心。
本期結束吧。下期走近硬盤跟文件體系,看看windows下,硬盤速度到底爛在哪裡。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!