图标文件格式之彩色图标
在ICO圖標中的彩色圖像和單色圖像的格式基本上是一樣的,唯一的區別就是image位圖是彩色的了,但是掩碼依舊是單色,對于掩碼來說無論image部分是多少bpp的像素,掩碼一直都是1bpp的,并且每行的像素數據必須是4字節對齊存儲的,主要是因為CPU讀取的時候可以加快速度,一次讀4字節.>在ICONDIRENTRY, ICONDIRENTRY之后保存就是圖像數據了,圖像格式包含了一個BITMAPINFOHEADER數據結構,其結構定義如下:>typedef struct tagBITMAPINFOHEADER{> DWORD biSize;> LONG biWidth;> LONG biHeight;> WORD biPlanes;> WORD biBitCount;> DWORD biCompression;> DWORD biSizeImage;> LONG biXPelsPerMeter;> LONG biYPelsPerMeter;> DWORD biClrUsed;> DWORD biClrImportant;>} BITMAPINFOHEADER, *PBITMAPINFOHEADER;>*其中biWidth是圖像的寬度,biHeight是圖像實際顯示高度的兩倍,要注意到這并不是一個標準的位圖格式,因為它包含了掩碼,以致于變成兩倍高度.>圖標有一個限制,它只支持4bpp, 8bpp, 16bpp, 32bpp,去不支持24bpp,對于彩色圖標,biCompression支持BI_RGB和BI_BITFIELDS.>*圖片的繪制也是按數學坐標軸的方式從下往上繪制的,即:>pixel = (screen AND mask) XOR image>*然而對于彩色像素來說,異或操作并不是有意義的操作,比如說在8bpp上,藍色異或淡黃褐色等于杏黃色,而在32bpp上等于#FOEA29.唯一有意義的是和黑色作異或,你會得到"對于任意顏色Q來說,黑色 XOR Q = Q".>mask image 結果 操作>0 Q (screen AND 0) XOR Q = Q 圖標的像素>1 0 (screen AND 1) XOR 0 = screen 不變>1 Q (screen AND 1) XOR Q = screen XOR Q 不確定>要使像素透明,你要把掩碼設置成白色,并且image為黑色,而要使用來自于圖標中的像素,則mask設置成黑色,image的顏色設置成你想要的其他任意顏色.>
總結
以上是生活随笔為你收集整理的图标文件格式之彩色图标的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ​RemoteIE官
- 下一篇: 图标文件格式之带透明通道的图标