0

重複の可能性:
透明度が約半分のアルファが適用されている場合、色の 16 進値を取得するには、どのコードを使用しますか?

視覚要素 (塗りつぶしのテキストまたは div の可能性がありますが、問題ではありません) があり、色が黒0x000000に設定され、アルファが.4または.5に設定され、背景が白一色の場合0xFFFFFF、結果は灰色になります。これを Photoshop でテストできます。

私が知りたいのは、その結果を得るためにどのコードを使用するかです。

私は方程式のようなものを探しています:

newColor = foregroundColor * alpha * backgroundColor

または、JavaScript、ActionScript、または VBScript のようなもの:

var color:uint = (0x888888 * .5) * 0x000000;

この問題を解決することの難しさの一部は、16 進数と、それが色にどのように関連しているかについて十分に理解していないため、自分で解決できないことです。

更新
以下の回答に基づいて、私はこれを思いつきました:

// set values
var topColorValue:uint = 0x000000;
var topColorAlphaValue:Number = .5;
var bottomColorValue:uint = 0xFFFFFF;

// get RGB
var redMix:int = ((topColorValue >> 16) & 0xFF);
var greenMix:int = ((topColorValue >> 8) & 0xFF);
var blueMix:int = (topColorValue & 0xFF);

// apply alpha to top color
if (alphaValue<1) {
    var colorPlusAlpha:uint = combineRGB((redMix * (1-alphaValue)), (greenMix*(1-alphaValue)), (blueMix * (1-alphaValue)));
}
else {
    colorPlusAlpha = topColorValue;
}

redMix = ((bottomColorValue >> 16) & 0xFF);
greenMix = ((bottomColorValue >> 8) & 0xFF);
blueMix = (bottomColorValue & 0xFF);

var secondColorPlusAlpha:uint = combineRGB((redMix * (alphaValue)), (greenMix*(alphaValue)), (blueMix * (alphaValue)));

var firstColorPlusSecondColor:uint = colorPlusAlpha + secondColorPlusAlpha;

上記のソリューションの問題は、1 だけずれていることです。上の色が0x999999で、アルファが.5で、下の色が0xFFFFFFの場合、結果は0xCBCBCBになります。そのピクセルを取得するか、Photoshop でスポイトを使用する場合、値は0xCCCCCCです。

4

1 に答える 1

1

IIU アルファ チャネルが正しく機能している場合、以前の色と現在追加されている色の間の混合比率が得られます。これは次のことを意味します。

colorVisible=colorNew*(1-alpha)+colorOld*alpha

大まかな健全性チェック:

  • alpha=0%colorVisible=colorNewどちらがOKに聞こえるかを与える
  • alpha=100%=1どちらcolorVisible=colorOldの音もOKです
于 2013-01-02T22:19:56.463 に答える