图标文件格式之单色图标
圖標在電腦中是極為常見的一種圖片格式,例如文件夾圖標,軟件圖標,瀏覽器圖標,文件圖標等等,充斥在電腦中的每一個角落.>ICON文件有一個固定的文件頭,它的數據結構如下:>typedef struct {> WORD idReserved;> WORD idType;> WORD idCount;> ICONDIRENTRY idEntries[1];>} ICONDIR, *LPICONDIR;>其中idReserved為系統保留的字段必須為0>其中idType為資源類型,1為圖標,2為光標>其中idCount為ICON圖標資源中包含多個少圖像組成>其中idEntries是一個指向ICONDIRENTRY結構體的數據它的長度是由idCount來決定的.>接下來我們看一看ICONDIRENTRY的結構體是如何定義的吧!>typedef struct {> BYTE bWidth;> BYTE bHeight;> BYTE bColorCount;> BYTE bReserved;> WORD wPlanes;> WORD wBitCount;> DWORD dwBytesInRes;> DWORD dwImageOffset;>} ICONDIRENTRY, *LPICONDIRENTRY;>又是一長串的結構體...>*bWidth和bHeight表示了圖像的寬和高,起初,系統只支持1到255的大小,即2^8-1的大小,>但是從Widnows95開始,可以支持到256的大小了.>*wBitCount和wPlanes用來描述圖像的顏色深度,對于單色圖標來說,它們都是1.>*bReserved是系統保留字段為0>*dwBytesinRes表示圖像數據大小>*dwImageOffse表示圖像數據的位置即偏移地址.>*但是有個地方是值得注意的,bColorCount它被假定的認為等于圖像的顏色數量,也就是說它等于:>bColorCount = 1 << (wBitCount * wPlanes)>當wBitCount * wPlanes >= 8時,則bColorCount為0>*在現實情況中,很多人懶得填寫bColorCount的值,即使是4色或16色的圖標,也把它設為0.從Windows XP開始,>Windows會檢測這個常見的錯誤,但是對于planar位圖來說,這個自動糾錯的機制還是有些問題的,幸運的是,幾乎沒有人使用planar位圖了.>但是你還是不應該依賴于Windows提供的自動糾錯機制,而正確的填寫bColorCount的值.錯誤的bColorCount意味著,由于提供了錯誤的顏色深度信息,>Windows可能會在ico文件中選擇一個不怎么理想的圖像.>*單色圖標由兩個位圖組成,常稱為掩碼,分別被稱為AND和XOR,繪制圖標分為兩個步驟:首先mask和screen作"與"操作,然后再做"異或"操作.>pixel = (screen AND mask) XOR image>為mask和image選擇適當的值,可以覆蓋所有單色blt的操作.>mask image 結果 操作>0 0 (screen AND 0) XOR 0 = 0 黑色>0 1 (screen AND 0) XOR 1 = 1 白色>1 0 (screen AND 1) XOR 0 = screen 不變>1 1 (screen AND 1) XOR 1 = NOT screen 反色>*理論上說,mask指定了image的像素是否拷貝到屏幕上,mask中黑色的像素表示要將image中相應的像素拷貝到屏幕上.>*mask和image位圖在物理上是保存為單個但是雙倍高度的DIB.首先是image位圖,然后是mask.由于DIB是自下而上的保存格式,>所以如果你要觀察一個位圖,那么mask在上面而image在下面).bmp文件格式使用的是數據坐標系,也就是說(0,0)在左下角,>bmp文件中的數據最開始是最下載一行像素.>*按照格式,每個圖標的圖像保存為BITMAPINFO結構的形式,根據其中BITMAPINFOHEADER來決定有沒有調色板數據,然后是image的像素數據和mask的像素數據.>其中biCompression必須為BI_RGB,由于是雙倍高度的位圖,所以biWidth為圖像的寬度,biHeight為圖像高度的兩倍.>*對于圖標的單色圖標就先寫到這里...>
總結
以上是生活随笔為你收集整理的图标文件格式之单色图标的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AutoCAD2013如何在窗口缩放图形
- 下一篇: 报名了马来西亚游学但是英语不好