0

可能重复:
当应用大约一半透明度的 alpha 时,我将使用什么代码来获取颜色的十六进制值?

如果我有一个视觉元素(可以是带有颜色填充的文本或 div,没关系)并且颜色设置为黑色0x000000,并且它的 alpha 设置为.4.5并且背景是纯白色0xFFFFFF,结果将是灰色。我们可以在 Photoshop 中进行测试。

我想知道的是我将使用什么代码来获得该结果?

我正在寻找诸如方程式之类的东西:

newColor = foregroundColor * alpha * backgroundColor

或者类似 JavaScript、ActionScript 或 VBScript 中的内容:

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

解决这个问题的部分困难是对十六进制以及它与颜色的关系缺乏充分的理解,无法自行解决。

更新
根据下面的答案,我想出了这个:

// 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且 alpha 为0.5且底部颜色为0xFFFFFF则结果为0xCBCBCB。在 Photoshop 中获取该像素或使用滴管时,该值为0xCCCCCC

4

1 回答 1

1

IIU alpha 通道的功能正确,它给出了之前颜色和现在添加的颜色之间的混合分数。这意味着:

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

粗略的健全性检查:

  • alpha=0%给出colorVisible=colorNew听起来不错
  • alpha=100%=1听起来colorVisible=colorOld也不错
于 2013-01-02T22:19:56.463 回答