在 WCS 1.0 中使用結構
WCS 1.0 所使用的大部分結構非常直接,而且不需要解釋。 它們記載於 WCS 1.0 參考一節,題為 結構。
例外狀況是 SetupColorMatchingW 函式所使用的 COLORMATCHSETUPW 結構,以及 Wingdi.h 中定義的下列 Windows 結構:
下列主題將被詳細討論:
Windows 位圖標頭結構
WCS 1.0 可讓 ICC 色彩設定檔連結或內嵌在與裝置無關的點陣圖中(DIB)。 這可讓 DIB 色彩比在 Windows 95 中使用 WCS 更準確地描述。 BITMAPV5HEADER,新的位圖標頭結構,定義於 Windows 98 版本的 Wingdi.h 中。 為了開發目的,它也包含在此程式設計人員參考檔案 Icm.h 中。 BITMAPV5HEADER 結構如下所示:
typedef struct {
DWORD bV5Size;
LONG bV5Width;
LONG bV5Height;
WORD bV5Planes;
WORD bV5BitCount;
DWORD bV5Compression;
DWORD bV5SizeImage;
LONG bV5XPelsPerMeter;
LONG bV5YPelsPerMeter;
DWORD bV5ClrUsed;
DWORD bV5ClrImportant;
DWORD bV5RedMask;
DWORD bV5GreenMask;
DWORD bV5BlueMask;
DWORD bV5AlphaMask;
DWORD bV5CSType;
CIEXYZTRIPLE bV5Endpoints;
DWORD bV5GammaRed;
DWORD bV5GammaGreen;
DWORD bV5GammaBlue;
DWORD bV5Intent; // Rendering intent for bitmap
DWORD bV5ProfileData; // Offset to profile data
DWORD bV5ProfileSize; // Size of embedded profile data
DWORD bV5Reserved; // Should be zero
} BITMAPV5HEADER, FAR *LPBITMAPV5HEADER, *PBITMAPV5HEADER;
bV5CSType 成員 可以取值為 PROFILE_EMBEDDED 或 PROFILE_LINKED,以指定配置檔是嵌入式還是與 DIB 連結。 bV5ProfileData 成員 是從 BITMAPV5HEADER 結構開頭到配置檔數據開頭的位元組位移。 如果配置檔是內嵌的,則配置檔數據是實際的配置檔;如果是連結的,則配置檔數據是以 Null 終止的檔名。 這不可以是 Unicode 字串。 它必須只由 Windows 字元集的字元組成(代碼頁 1252)。
當 DIB 載入記憶體時,配置檔案資料(如果存在的話)應該緊接在顏色表之後,bV5ProfileData 應該提供從 BITMAPV5HEADER 結構開頭起的配置檔案資料的偏移量。 此成員的值現在會不同,因為位圖的位元不再遵循記憶體中的顏色表。 應用程式在將 DIB 載入記憶體之後,應該修改 bV5ProfileData 成員。
針對封裝的 DIB,配置檔資料應該遵循類似檔案格式的點陣元。 bV5ProfileData 成員仍應該從 BITMAPV5HEADER 結構的開頭提供配置檔數據的位移。
只有當 bV5Size == sizeof (BITMAPV5HEADER) 和 bV5CSType 是 PROFILE_EMBEDDED 或 PROFILE_LINKED 時,應用程式才應該存取設定檔數據。
如果已連結設定檔,設定檔的路徑可以是任何完整合格名稱(包括網路路徑),並可以使用 Win32 CreateFile 函式開啟。
V4 和 V5 標頭之間的差異
使用新的點陣圖結構時,辨識如何設定 BITMAPV4HEADER 和 BITMAPV5HEADER 結構的差異很有用:
V4 標頭 | 意義 |
---|---|
bV4CSType | LCS_CALIBRATED_RGB。 這個值表示端點和伽瑪是在適當的欄位中提供。 錯誤的數值可能會造成問題。 |
bV4CSType | LCS_sRGB。 此值表示位圖位於 sRGB 色彩空間中(忽略伽瑪和端點)。 |
bV4CSType | LCS_WINDOWS_COLOR_SPACE。 這個值表示位圖位於 Windows 預設色彩空間中。 |
V5 標頭 | 意義 |
---|---|
bV5CSType | LCS_CALIBRATED_RGB。 這個值表示端點和伽瑪值是在適當的字段中提供。 假值會造成問題。 |
bV5CSType | LCS_sRGB。 此值表示位圖位於 sRGB 色彩空間中(忽略伽瑪和端點)。 |
bV5CSType | 嵌入式個人檔案。 這個值表示 bV5ProfileData 指向記憶體緩衝區,其中包含要使用的配置檔(會忽略伽瑪和端點)。 |
bV5CSType | PROFILE_LINKED。 這個數值意指 bV5ProfileData 指向要使用的配置檔檔名(伽瑪值和端點將被忽略)。 |
bV5CSType | LCS_WINDOWS_COLOR_SPACE。 這個值表示位圖位於 Windows 預設色彩空間中。 |
為了在舊位圖與新的 BITMAPV5HEADER 結構間進行轉換,WCS 1.0 程式設計人員參考中包含了一個名為 Bitmap.exe 的命令列轉換工具檔案。
BitMap.exe:用於轉換位圖標題的 Command-Line 公用程式
Bitmap.exe 是命令行公用程式,位於您指定的安裝資料夾下的 \Bin 資料夾中。 它會修改 Windows 位圖的標頭,讓您將現有的點陣圖從 BITMAPINFOHEADER 和 BITMAPV4HEADER 標頭結構轉換為更新的 BITMAPV5HEADER 結構,並且可以再轉換回去。 命令列語法如下所示:
BITMAP [/d] [/1|4|5] [/s] [/f]
filename
命令列開關具有下列效果。
開關 | 意義 |
---|---|
/d | 預設值會自動在轉換的標頭中輸入。 |
/1 | 將指定的點陣圖轉換為 BITMAPINFOHEADER |
/4 | 將指定的點陣圖轉換成 BITMAPV4HEADER |
/5 | 將指定的點陣圖轉換成 BITMAPV5HEADER |
/f | 強制轉換,即使點陣圖已經有正確的標頭 |
/s | 轉換指定資料夾中的點陣圖及其下的所有子目錄 |