萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 網頁製作 >> 互動設計

圖標文件格式深度解析:單色圖標(ICO)的數據結構與渲染原理

圖標(ICO)是電腦中極常見的圖片格式:資料夾、軟件、瀏覽器、文件圖標充斥每個角落。ICO 文件擁有固定文件頭,數據結構如下:

typedef struct {
    WORD idReserved;   // 系統保留,必須為 0
    WORD idType;       // 資源類型:1=圖標,2=光標
    WORD idCount;      // 包含圖像數量
    ICONDIRENTRY idEntries[1]; // 指向 ICONDIRENTRY 結構體數組
} ICONDIR, *LPICONDIR;

ICONDIRENTRY 結構體詳解

typedef struct {
    BYTE  bWidth;         // 圖像寬度(1-255,Win95 起支援 256)
    BYTE  bHeight;        // 圖像高度
    BYTE  bColorCount;    // 顏色數量 = 1 << (wBitCount * wPlanes),≥8 時為 0
    BYTE  bReserved;      // 系統保留,為 0
    WORD  wPlanes;        // 色盤數,單色圖標為 1
    WORD  wBitCount;      // 每像素位數,單色圖標為 1
    DWORD dwBytesInRes;   // 圖像數據大小
    DWORD dwImageOffset;  // 圖像數據偏移地址
} ICONDIRENTRY, *LPICONDIRENTRY;

關鍵點:

  • bColorCount 常被忽略填 0,XP 起系統會自動糾錯,但 planar 位圖仍有問題。建議正確填寫,否則 Windows 可能選擇不理想圖像。
  • 單色圖標由兩個位圖組成:AND 掩碼與 XOR 掩碼。繪製公式:pixel = (screen AND mask) XOR image。mask 指定 image 像素是否拷貝到屏幕,mask 黑色像素表示拷貝對應 image 像素。
  • mask 和 image 物理上保存為單個雙倍高度 DIB:先 image 後 mask。DIB 自下而上保存,故 mask 在上、image 在下。BMP 用數據坐標系(0,0 在左下角)。
  • 每個圖標圖像保存為 BITMAPINFO 結構,根據 BITMAPINFOHEADER 決定是否有調色板,然後是 image 像素數據與 mask 像素數據。biCompression 必須為 BI_RGB,biHeight 為圖像高度兩倍。

單色圖標核心結構與渲染邏輯到此結束。掌握這些底層細節,有助於理解圖標顯示異常排查與跨平台兼容性優化。

copyright © 萬盛學電腦網 all rights reserved