#deine _rgb16bit555(r,g,b) ((b&31) + ((g&31) << 5) + ((r&31) << 10))
因為這個是16位色5551格式的xr4
r3r2
r1r0
g4g3
g2g1
g0b4
b3b2
b1b0
因此31轉化成二進位制與的話、就是5個1(11111)、假設傳來的rgb值都為11111、那麼
b就為11111
g就為1111100000
r就為111110000000000
所以三者相加就為111111111111111、剛好就一一對應上面的**、因為pc機採用低位元組在前的格式、資料通常是從低位到高位、而這個色彩位組卻是相反的、採用了高位元組在前的格式、因為讀起來符合rgb的順序、所以填充的時候要相反來填充、所以就是以bgr的順序來填充、剩下的最後乙個高位x是用來填充成16位資料的、無任何意義、所以實際的rgb資料就為
類似的、16位色除了有x555的排列、還有565的排列、也就是說g為6位、剛好就夠了不用x來填充16位資料、因此資料為
r4r3
r2r1
r0g5
g4g3
g2g1
g0b4
b3b2
b1b0
所以產生565的16位色巨集為
#define _rgb16bit565(r,g,b) ((b&31) + ((g&63) << 5) + ((r&31) << 11))
這裡類似的先將31和63轉換成二進位制、31剛好是5位數11111、63剛好是6位數111111、所以也就符合了565的排列了、一如往前、也設定傳來的色彩白色、那麼
b就是11111
g就是11111100000
r就是1111100000000000
那麼加起來狠自然也是16位的白色了1111111111111111
除了x555和565排列外、還有一種a555的16位、無非就是把x這個無用位替換成alpha通道、使其來控制透明色
剩下的24位和32位的巨集就不再推導了、給出了相應的巨集
#define _rgb24bit(r,g,b) (b + (g << 8) + (r << 16))
24位採用888的位排列
8位深 16位深 24位深
乙個畫素用多少位表示,例如,乙個畫素點,用1位資料表示的話,它有兩種顏色可以選擇 2的1次方,黑白兩種 如乙個畫素點,用8位的資料表示的話,這個點可以有2的8次方 256 種顏色的選擇,同理,16 24等。8位rgb影象 16位rgb影象 這裡的8位是針對rgb影象而言,rgb影象由三個顏色通道組成...
24位真彩和32位真彩
24位真彩模式,每通道寬為乙個位元組,共計三個通道,也就是說每畫素佔3位元組。inline void plot pixel 24 int x,int y,int red,int green,int blue,uchar video buffer,int lpitch end plot pixel 2...
mul和div指令(8位,16位,32位)
無符號乘法指令,預設運算元與eax相乘 這裡只說32位,其他與下面的div類似 格式 mul 運算元 運算元只有乙個運算元與eax相乘,結果共有16位 這裡的16位是16進製制數 高8位放在edx中,低8位放在eax中 執行命令下面的命令,此時,ecx為00000005,eax為ffff fff9 ...