在 WCS 1.0 中使用結構
WCS 1.0 所使用的大部分結構都非常簡單,而且只需要一些說明。 它們記載于 WCS 1.0 參考一節中,標題為 Structure。
例外狀況是SetupColorMatchingW函式所使用的COLORMATCHSETUPW結構,以及 Wingdi.h 中定義的下列 Windows 結構:
下列主題會以更大的長度討論:
Windows 點陣圖標頭結構
WCS 1.0 可讓您連結或內嵌在與裝置無關的點陣圖中, (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結構的開頭提供設定檔資料的位移。
只有當 ( BITMAPV5HEADER == ) ANDbV5CSType PROFILE_EMBEDDED或PROFILE_LINKED時,應用程式才應該存取設定檔資料。
如果設定檔已連結,設定檔的路徑可以是任何完整名稱, (包括可使用 Win32 CreateFile 函式開啟的網路路徑) 。
V4 和 V5 標頭之間的差異
在使用新的點陣圖結構時,辨識 BITMAPV4HEADER 和 BITMAPV5HEADER 結構設定方式的差異相當實用:
V4 標頭 | 意義 |
---|---|
bV4CSType | LCS_CALIBRATED_RGB。 這個值表示在適當的欄位中會提供端點和 Gamma。 假值會造成問題。 |
bV4CSType | LCS_sRGB。 這個值表示點陣圖位於 sRGB 色彩空間中, (gammas 和端點忽略) 。 |
bV4CSType | LCS_WINDOWS_COLOR_SPACE。 這個值表示點陣圖位於 Windows 預設色彩空間中。 |
V5 標頭 | 意義 |
---|---|
bV5CSType | LCS_CALIBRATED_RGB。 這個值表示在適當的欄位中會提供端點和 Gamma。 假值會造成問題。 |
bV5CSType | LCS_sRGB。 這個值表示點陣圖位於 sRGB 色彩空間中, (gammas 和端點忽略) 。 |
bV5CSType | PROFILE_EMBEDDED。 這個值表示 bV5ProfileData 指向記憶體緩衝區,其中包含要使用 (gamma 和端點的設定檔) 。 |
bV5CSType | PROFILE_LINKED。 這個值表示 bV5ProfileData 指向設定檔的檔案名,以使用 (gamma 和端點) 。 |
bV5CSType | LCS_WINDOWS_COLOR_SPACE。 這個值表示點陣圖位於 Windows 預設色彩空間中。 |
為了將較舊的點陣圖與新的 BITMAPV5HEADER 結構轉換,名為 Bitmap.exe 的命令列轉換公用程式檔案包含在 WCS 1.0 程式設計人員參考中。
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 | 轉換指定資料夾中的點陣圖及其下的所有子目錄 |