0

rgb-color (#ebfcff) の rgba 値を取得しようとしていました。RGB カラーは、白い背景に配置されたときの RGBA です。(a はアルファの略)

したがって、searchedColour + #ffffff = #ebfcff

私の評価では、解決策は #ebfcff から白を差し引くことです。しかし、どのように色を減算しますか?

私はすでに適切な解決策を探しました。指定された RGB カラーから白を減算して、白と重なったときに指定された色に等しい rgba 形式の新しい色を取得する方法を知っている人はいますか?

4

1 に答える 1

3

色の値は単に加算されるだけではありません。

X色の上に色をプロットするYと、結果の色 の各カラー チャネルの値は次のC式で与えられます。

C = X * a + Y * (a-1)

浮動小数点表現を使用する (各チャネルは 0 から 1 の値です)。はaのアルファ チャネルですX。(0 ~ 255 に簡単に変換できます)。

白の場合、Yすべてのチャネルで 1 になるため、次のようになります。

C = X * a + (a-1)

したがって、aが 0 の場合、明らかに X を見つけることができません。これは理にかなっています。色が完全に透明である場合、結合された色に違いはありません。

同様に、色が白 ( X=1) の場合、アルファを決定できません (組み合わせた色は、アルファに関係なく白になります)。

また、どちらXかを見つけるaことも、もう一方を知らずして見つけることもできません。

色のアルファがわかっている場合は、色が何であるかを判断できますが、組み合わせた色 ( C) が離散値 (0 から 255 の整数など) である場合は、丸められるため、取得できるのはプロットされた色の近似値 ( X)。精度はアルファに依存します (プロットされた色が透明であるほど、色を正確に判断できなくなります)。

したがって、Xについて解く:

            X * a = C - a - 1
Therefore:  X = (C - a - 1 ) / a

8 ビット カラー チャネル (24 ビット カラー) の場合:

X = 255 * ( C/255 - a/255 - 1 ) / (a/255)

(6 桁の 16 進数値が与えられた場合、これを数字の各ペアに適用しますC)。

浮動小数点計算を避けるために最適化できます。

それが役に立つかどうかはわかりませんが、それがあなたにできるすべてです。

于 2013-04-22T21:41:52.553 に答える