CXFORMWITHALPHA レコードは CXFORM レコードを拡張したもので、アルファチャネル付きの色変換を可能にします。 次の 2 種類の色変換を使うことができます。
乗算変換は、 赤・緑・青・アルファ のそれぞれに 8.8 形式の固定小数の値を掛け算します。この固定小数の 1.0 の値は 0x100 か、10 進数の値で 256 を使って表現します。
次のような式を使って、色 (R,G,B,A) を 色 (R', G', B', A') に変換します。
R' = (R * RedMultTerm) / 256 G' = (G * GreenMultTerm) / 256 B' = (B * BlueMultTerm) / 256 A' = (A * AlphaMultTerm) / 256
加算変換は、 赤・緑・青・アルファ のそれぞれに正の数または負の数の値を足し算します。結果が 255 を超えた場合は、255 に飽和されます。 結果が 0 以下になる場合も同様に、 0 に飽和されます。
次のような式を使って、色 (R,G,B,A) を 色 (R', G', B', A') に変換します。
R' = max(0, min(R + RedAddTerm, 255)) G' = max(0, min(G + GreenAddTerm, 255)) B' = max(0, min(B + BlueAddTerm, 255)) A' = max(0, min(A + AlphaAddTerm, 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)) A' = max(0, min(((A * AlphaMultTerm) / 256) + AlphaAddTerm, 255))
CXFORMWITHALPHA レコードは 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] | 乗算値 (青) |
AlphaMultTerm | If HasMultTerms = 1, SB[Nbits] | 乗算値 (アルファ) |
RedAddTerm | If HasAddTerms = 1, SB[Nbits] | 加算値 (赤) |
GreenAddTerm | If HasAddTerms = 1, SB[Nbits] | 加算値 (緑) |
BlueAddTerm | If HasAddTerms = 1, SB[Nbits] | 加算値 (青) |
AlphaAddTerm | If HasAddTerms = 1, SB[Nbits] | 加算値 (アルファ) |