Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何增加RGB暗度?_Actionscript 3_Colors_Rgb_Haxe - Fatal编程技术网

Actionscript 3 如何增加RGB暗度?

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 您可以很容易地实现转换程序。 或者,可以找到库。原则上,您的伪代码看起来不错,所以实际代码中一定有问题。虽然这真的很奇

我试图用纯数学来增加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

您可以很容易地实现转换程序。
或者,可以找到库。

原则上,您的伪代码看起来不错,所以实际代码中一定有问题。虽然这真的很奇怪,你会有一个红色的结果与绿色的输入。在你的代码中,这可能是一个大于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