Actionscript 3 如何增加RGB暗度?
我试图用纯数学来增加RGB的黑暗度,而不依赖任何框架 因此,以下是我的实现: 配备R、G、B(各为0至256)和暗度系数(0至1)Actionscript 3 如何增加RGB暗度?,actionscript-3,colors,rgb,haxe,Actionscript 3,Colors,Rgb,Haxe,我试图用纯数学来增加RGB的黑暗度,而不依赖任何框架 因此,以下是我的实现: 配备R、G、B(各为0至256)和暗度系数(0至1) //这是一个伪代码 r*=暗度系数; g*=暗度系数; b*=暗度系数; r=int(r); g=int(g); b=int(b); g您应该使用RGB的HSV接口 首先,RGB转换为HSV 第二,降低v(亮度[0到1]) 最后,HSV转换为RGB 您可以很容易地实现转换程序。 或者,可以找到库。原则上,您的伪代码看起来不错,所以实际代码中一定有问题。虽然这真的很奇
//这是一个伪代码
r*=暗度系数;
g*=暗度系数;
b*=暗度系数;
r=int(r);
g=int(g);
b=int(b);
g您应该使用RGB的HSV接口
首先,RGB转换为HSV
第二,降低v(亮度[0到1])
最后,HSV转换为RGB
您可以很容易地实现转换程序。
或者,可以找到库。原则上,您的伪代码看起来不错,所以实际代码中一定有问题。虽然这真的很奇怪,你会有一个红色的结果与绿色的输入。在你的代码中,这可能是一个大于1的因子,因为你没有钳制通道,所以绿色通道可能溢出到红色通道中
这将有助于:
function clamp(channel:Float) {
var v = Std.int(channel);
return
if (v < 0) 0;
else if (v > 0xFF) 0xFF;
else v;
}
function darken(color:Int, factor:Float) {
var r = (color >> 16) & 0xFF;
var g = (color >> 8) & 0xFF;
var b = color & 0xFF;
return
(clamp(r * factor) << 16)
+ (clamp(g * factor) << 8)
+ clamp(b * factor);
}
功能钳位(通道:浮动){
var v=标准整数(通道);
返回
如果(v<0)0;
如果(v>0xFF)0xFF,则为else;
else v;
}
函数变暗(颜色:Int,因子:Float){
var r=(颜色>>16)&0xFF;
var g=(颜色>>8)&0xFF;
var b=颜色&0xFF;
返回
(clamp(r*factor)颜色变换是解决此问题的最简单方法,无需编写任何新代码
看
为了使当前颜色变暗,倍增属性将是您想要的
var colorInfo:ColorTransform = myDisplayObject.transform.colorTransform;
// Make some color transformations here.
// Reduce colour by 10%
colorInfo.redMultiplier = 0.9;
colorInfo.greenMultiplier = 0.9;
colorInfo.blueMultiplier = 0.9;
// Commit the change.
myDisplayObject.transform.colorTransform = colorInfo;
对于RGB(R1、G1、B1),通过p%的百分比/系数变暗的新RGB(R2、G2、B2)应为:
R2 = R1 - (R1/100)*P
G2 = G1 - (G1/100)*P
B2 = B1 - (B1/100)*P
这只是您特定问题的解决方案。如果您想处理更高级的内容,请查看HSL颜色空间以及如何使用其L因子。正在移动一个浮动指针数字(25.6)在ActionScript中定义?我正在使用haxe,但我添加了ActionScript标记以获得更多有知识的人的颜色。您得到的最终颜色值是多少?最大值应该是255,而不是256。设置G=256相当于设置R=1和G=0
R2 = R1 - (R1/100)*P
G2 = G1 - (G1/100)*P
B2 = B1 - (B1/100)*P