視件和顏色表 硬體之間總存在差別。最原始的x伺服器只支援兩種顏色,每乙個畫素只能是on或off(開或關)。這就是「每畫素一位」(bpp)顯示模式。每畫素一位的顯示模式稱為深度為1。多數高階的x伺服器支援每畫素24或32位,還允許以視窗為基礎指定不同的深度。每畫素24 位允許224(16777216)種畫素,包含了比人眼能分辨的還要多的顏色。 從概念上說,位圖顯示由乙個矩形的畫素網格組成。每個畫素由一些固定的位數組成;畫素以一種硬體相關的方法對映為可視的顏色。考慮這種概念的一種方法就是想象乙個二維的整數陣列,整數的大小等於要求的位數。換一種說法,可以想象一種顯示就像乙個「位平面」棧,或「位」的二維陣列。如果每個平面都平行於其他平面,那麼乙個畫素就是一根在相同座標處穿過每個平面的垂線,並且從每乙個平面處獲得一位。這就是術語「深度」的起源,因為每個畫素的位數等於位平面棧的深度。 在x視窗系統中,畫素代表在乙個顏色查詢表中的入口。一種顏色就是一組紅、綠、藍(rgb)值—監視器以一定比率混合紅綠藍光以顯示每個畫素。例如,考慮一種八位的顯示模式:八位不足以為現實中的顏色編碼,只可能為很少部分的rgb值編碼。作為替代,資料位被解釋為整數,用於為rgb顏色值做索引。這個顏色表稱為colormap(顏色表),有時,你也可以修改它以包含要使用的顏色,雖然這樣做是硬體相關的(一些colormap是唯讀的)。 視件(visual)用來決定畫素的位模式如何轉換為乙個可見的顏色。因而,視件還定義了顏色表如何工作。在八位顯示中,x伺服器也許將每個畫素解釋為乙個包含256種可能顏色值的顏色表的索引。典型情況下,24位視件有三個顏色表:乙個是紅色的濃淡值,乙個是綠色的濃淡值,乙個是藍色的濃淡值。每個顏色錶用乙個八位的值索引;三個八位值組成24位的畫素。視件定義了畫素內容的含義,還定義了顏色表是唯讀的還是可修改的。 簡而言之,視件就是特定x伺服器的顏色容量的描述。在xlib中,你得圍繞視件做很多羅嗦的事,但是gdk和gtk+能極大地簡化了這些繁瑣工作。 16.3.1gdkvisual xlib能報告乙個所有可用的視件以及相關資訊的列表;gdk在乙個稱為gdkvisual的結構中保持乙個這些資訊的客戶端拷貝。gdk能報告可用的視件,並將它們以不同的方式分級。在多數時候,只需用gdk_visual_get_system()函式就可以了,它返回乙個指向缺省視件的指標。如果正在寫乙個gtkwidget構件,gtk_widget_get_visual()函式將返回應該使用的視件。返回的視件不是乙個拷貝,所以不需要釋放它,gdk將永久儲存視件。 獲取缺省視件 #includegdkvisual*gdk_visual_get_system() 下面是gdkvisual結構的定義,大多數成員都用於由顏色計算畫素值。 typedefstruct_gdkvisualgdkvisual; struct_gdkvisual ; 16.3.2視件的型別 視件用不同的度量方法加以區分。它們可以是灰度級或者rgb值,顏色表可以是可修改的或者固定的,畫素值可以是單個的顏色表或者包含了壓縮的紅、綠、藍的索引值。下面是gdkvisualtype的可能取值: gdk_visual_static_gray:意味著顯示器是單色的或者灰度的,顏色表不能修改。乙個畫素值只是乙個灰度級別,每個畫素都是「硬編碼」,分別代表乙個確定的螢幕上的顏色。 gdk_visual_grayscale:意味著顯示器是可修改的,但是只有灰度的級別才可能修改。畫素代表在顏色表中的乙個入口,所以給定的畫素在不同的時候能夠代表不同的灰度級別。 gdk_visual_static_color:代表一種顏色顯示,它使用單個唯讀的顏色表而不是紅、綠、藍每種顏色各乙個單獨的顏色表。這種顯示差不多就是12位或更少(使用單個顏色表的24位顯示器需要乙個帶224個入口的顏色表,差不多有500mb)。這是一種惱人的視件,因為它的可用顏色太少,而且不能改變成它們的實際顏色。 gdk_visual_pseudo_color:從很多年前開始,就一直是低端pc硬體的常用視件。如果有乙個1mb視訊記憶體、256色的顯示卡,這極有可能就是你的x伺服器的視件。它代表一種具有讀/寫顏色表的顏色顯示。畫素只對單個顏色表索引。 gdk_visual_true_color:是帶三個唯讀顏色表的顏色顯示,紅、綠、藍每種顏色有乙個顏色表。乙個畫素包含三個索引,每個顏色表乙個。在畫素值和rgb三元組之間有固定的數學關係,可以用下面的公式從[0,255]間的紅、綠、藍值獲取畫素值: gulongpixel=(gulong)(red*65536+green*256+blue)。 gdk_visual_direct_color:是一種有三個讀寫顏色表的顏色顯示。如果使用gdk顏色處理例程,它們只是簡單地填充所有三個顏色表以模擬真彩顯示。 … continue reading →
posted in
linux作業系統
|tagged
gtk, 視件, 顏色表 |
|編輯
CSS顏色表示法和顏色表
顏色表示法 color name 顏色的名稱 color red 直接用英文意思來寫,但是數量有限,不支援透明顏色 十六進製制方式 color 191d11 所有 開頭的都是16進製制 rgb 十進位制,十進位制,十進位制 表示方法 每個值的取值範圍是0 255,一共256個 rgba 十進位制,十...
gtk 2 0和glade3 4 5的GUI程式設計
gtk 2.0 tutorial 關於gtk 2.0和glade3程式設計的資料網上比較少,有的也介紹得不很清楚。這裡自己根據資料摸索的乙個簡單用glade3寫介面,並顯示該程式視窗的乙個簡單的程式。供以後參考。include include int main int argc,char argv ...
sdk程式設計改變static控制項字型和顏色
關於對話方塊中要處理的控制項的id是idc mystatic 關於 框的訊息處理程式。lresult callback about hwnd hdlg,uint message,wparam wparam,lparam lparam else setbkcolor hdc wparam,getsys...