共用方式為


在 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 == sizeofBITMAPV5HEADER) 和 bV5CSType 是 PROFILE_EMBEDDED 或 PROFILE_LINKED 時,應用程式才應該存取設定檔數據。

如果已連結設定檔,設定檔的路徑可以是任何完整合格名稱(包括網路路徑),並可以使用 Win32 CreateFile 函式開啟。

V4 和 V5 標頭之間的差異

使用新的點陣圖結構時,辨識如何設定 BITMAPV4HEADERBITMAPV5HEADER 結構的差異很有用:

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 位圖的標頭,讓您將現有的點陣圖從 BITMAPINFOHEADERBITMAPV4HEADER 標頭結構轉換為更新的 BITMAPV5HEADER 結構,並且可以再轉換回去。 命令列語法如下所示:

BITMAP [/d] [/1|4|5] [/s] [/f] 
filename

命令列開關具有下列效果。

開關 意義
/d 預設值會自動在轉換的標頭中輸入。
/1 將指定的點陣圖轉換為 BITMAPINFOHEADER
/4 將指定的點陣圖轉換成 BITMAPV4HEADER
/5 將指定的點陣圖轉換成 BITMAPV5HEADER
/f 強制轉換,即使點陣圖已經有正確的標頭
/s 轉換指定資料夾中的點陣圖及其下的所有子目錄