【发布时间】:2012-12-17 07:02:45
【问题描述】:
如果我有一个可视元素(可以是文本或带有颜色填充的 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为.5并且底部颜色为0xFFFFFF 那么结果是0xCBCBCB。在 Photoshop 中获取该像素或使用滴管时,该值为 0xCCCCCC。
【问题讨论】:
-
重新发布您的问题以忽略接近投票是不合适的。如果您的问题足够切题,则将重新打开另一个问题。
-
另一个问题被关闭了,因为最初的读者认为它与编程无关。他们没有要求澄清,而是决定关闭它。我添加了新信息。
-
我认为您正在寻找color composition formulas。它们将取决于您想要的组合类型。我不知道制作一个实现相应公式的 JavaScript 函数是否对您有用。
-
根据链接,我认为应该是 alpha blending。
标签: javascript actionscript-3 colors hex