CXFORM レコードは、グラフィックスオブジェクトへの簡単な色変換の仕方を定義します。次の 2 種類の変換が可能です。
乗算変換は、 赤・緑・青 のそれぞれに 8.8 形式の固定小数の値を掛け算します。この固定小数の 1.0 の値は 0x100 か、10 進数の値で 256 を使って表現します。
次のような式を使って、色 (R,G,B) を 色 (R', G', B') に変換します。
R' = (R * RedMultTerm) / 256 G' = (G * GreenMultTerm) / 256 B' = (B * BlueMultTerm) / 256
加算変換は、 赤・緑・青 のそれぞれに正の数または負の数の値を足し算します。結果が 255 を超えた場合は、255 に飽和されます。 結果が 0 以下になる場合も同様に、 0 に飽和されます。
次のような式を使って、色 (R,G,B) を 色 (R', G', B') に変換します。
R' = max(0, min(R + RedAddTerm, 255)) G' = max(0, min(G + GreenAddTerm, 255)) B' = max(0, min(B + BlueAddTerm, 255))
次のように、乗算変換と加算変換を組み合わせることも可能です。乗算が先に適用されます。
R' = max(0, min(((R * RedMultTerm) / 256) + RedAddTerm, 255)) G' = max(0, min(((G * GreenMultTerm) / 256) + GreenAddTerm, 255)) B' = max(0, min(((B * BlueMultTerm) / 256) + BlueAddTerm, 255))
CXFORM レコードは、バイト境界に合わせられる (byte aligned) 必要があります。
フィールド | 型 | コメント |
HasAddTerms | UB[1] | 加算値を使用する = 1 |
HasMultTerms | UB[1] | 乗算値を使用する = 1 |
Nbits | UB[4] | これ以降のフィールドで使用するビット長 |
RedMultTerm | If HasMultTerms = 1, SB[Nbits] | 乗算値 (赤) |
GreenMultTerm | If HasMultTerms = 1, SB[Nbits] | 乗算値 (緑) |
BlueMultTerm | If HasMultTerms = 1, SB[Nbits] | 乗算値 (青) |
RedAddTerm | If HasAddTerms = 1, SB[Nbits] | 加算値 (赤) |
GreenAddTerm | If HasAddTerms = 1, SB[Nbits] | 加算値 (緑) |
BlueAddTerm | If HasAddTerms = 1, SB[Nbits] | 加算値 (青) |