程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 帶你了解ico圖標文件格式

帶你了解ico圖標文件格式

編輯:更多關於編程

       現在有很多圖標采用的都是ico格式,ico圖標文件可以存儲單個圖案,也可以存儲多尺寸、多色板。下面我們就來了解下ico圖標文件格式構成。

    帶你了解ico圖標文件格式 三聯

      圖標文件格式

      圖標文件(*.ico)由圖標文件頭、圖片入口數據和圖片數據三個部分組成,這三個部分的具體結構如下:

      1. 圖標文件頭

      圖標文件頭包括三個部分6個字節,他們分別是

      數據類型

      字節

      含義

      說明

      WORD

      2

      保留字段(wReserved)

      必須0

      WORD

      2

      文件類型(wType)

      必須1

      WORD

      2

      圖片數量(wCount)

      表示該圖標文件包含多少個圖片

      2. 圖片入口

      接下來是wCount個“圖片入口”數據。每個“圖片入口”數據結構如下:

      數據類型

      字節

      含義

      說明

      BYTE

      1

      圖像寬度(bWidth)

      單位:像素。256px的圖片該值為0

      BYTE

      1

      圖像高度(bHeight)

      同上

      BYTE

      1

      顏色數(bClrCount)

      不重要

      BYTE

      1

      保留字段(bReserved)

      必須為0

      WORD

      2

      平面數(wPlanes)

      一般為1

      WORD

      2

      比特數(wBitCount)

      顏色深度,取值4位、8位、24位和32位

      DWORD

      4

      數據大小(dwImageSize)

      對應圖片數據占用的字節數

      DWORD

      4

      數據位置(dwOffset)

      對應圖片數據在文件中的位置

      3. 圖片數據

      對於256X256像素的圖片,在文件中存儲的格式是PNG,只要將整個PNG文件寫在數據區就可以了,對應前面的圖片入口的數據大小(dwImageSize)也是PNG文件的大小。但是XP操作系統不認該圖片。

      對於其他圖片,該區域存放了一個目標顏色深度(wBitCount)的數據位圖後面跟一個對應的遮罩位圖。系統在繪制圖標時會先將遮罩位圖與目標設備“與”拷貝(SRCAND),然後在把數據位圖與目標設備“異或”拷貝(SRCINVERT)。

      數據位圖的顏色深度可以是4位16色、8位256色、24位真彩色或32位帶Alpha通道。需要注意的是就算是32位帶Alpha通道的位圖也是需要遮罩位圖的。

      遮罩位圖是一個1位顏色深度的2值位圖,有圖像的位置填0,透明的位置填1。

      數據位圖的結構與普通位圖結構基本相似,但是缺少14位的位圖文件頭。具體包含位圖信息頭、顏色表(只有4位和8位的位圖才會有,4位的位圖顏色表長度為16X4=64字節,8位的位圖顏色表長度為256X4=1024字節)和數據區。

      位圖信息頭結構如下:

      數據類型

      字節

      含義

      說明

      DWORD

      4

      結構大小(biSize)

      固定為40

      LONG

      4

      圖像寬度(biWidth)

      單位:像素

      LONG

      4

      圖像高度(biHeight)

      單位:像素。由於還有遮罩因此要X 2

      WORD

      2

      平面數(biPlanes)

      一般為1

      WORD

      2

      比特數(biBitCount)

      顏色深度,取值4位、8位、24位和32位

      DWORD

      4

      壓縮(biCompression)

      一般為0

      DWORD

      4

      數據大小(biSizeImage)

      LONG

      4

      分辨率(biXPelsPerMeter)

      LONG

      4

      分辨率(biYPelsPerMeter)

      DWORD

      4

      使用顏色(biClrUsed)

      DWORD

      4

      重要顏色(biClrImportant)

      獲取數據位圖可以用如下辦法:

      先利用CImage類創建一個目標大小和顏色深度的位圖。注意:4位和8位的位圖需要設置顏色表,不然無法從源圖片復制數據,顏色表可以采用固定的數據。32位位圖需要開啟Alpha通道,不然無法復制Alpha通道的數據。

      然後利用CImage::GetDC、CImage::ReleaseDC、CImage:: GetPixelAddress和CImage::Draw等函數從源圖復制圖像數據到該位圖。

      接著將該位圖保存到一個臨時位圖文件中。從該文件中讀取。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved