Actionscript 3 检查电影剪辑的平均亮度(忽略透明度)?
我正在开发一个Flash应用程序,它将显示由各种PNG制成的透明电影嘴唇。PNG需要在运行时进行颜色校正,以使其亮度一致。为了实现这一点,我编写了一段代码,使用MovieClip的平均亮度级别来确定图像的亮度。有人亲切地给了我计算Adobe论坛平均亮度的代码: 这种使用直方图的方法非常有效,除非MovieClip具有透明区域。MovieClip中的任何透明像素都会显示为纯白色并扭曲结果 有人知道更好的方法吗?我需要一个准确的结果;我记得我尝试过一些古怪的事情,比如将电影剪辑缩小到1像素,然后读取该像素的颜色,但这并不有效 编辑: 啊哈!我终于从中找到了答案。默认的BitmapData构造函数填充为白色。我用透明像素代替了它。参见下面的答案。Actionscript 3 检查电影剪辑的平均亮度(忽略透明度)?,actionscript-3,flash,Actionscript 3,Flash,我正在开发一个Flash应用程序,它将显示由各种PNG制成的透明电影嘴唇。PNG需要在运行时进行颜色校正,以使其亮度一致。为了实现这一点,我编写了一段代码,使用MovieClip的平均亮度级别来确定图像的亮度。有人亲切地给了我计算Adobe论坛平均亮度的代码: 这种使用直方图的方法非常有效,除非MovieClip具有透明区域。MovieClip中的任何透明像素都会显示为纯白色并扭曲结果 有人知道更好的方法吗?我需要一个准确的结果;我记得我尝试过一些古怪的事情,比如将电影剪辑缩小到1像素,然后读取
var bmp:BitmapData=新的BitmapData(image.width/4,image.height/4,true,0x00000000);
var bmp:BitmapData = new BitmapData(image.width/4,image.height/4, true, 0x00000000);
bmp.draw(image);
bmp.draw(image.getChildAt(0));
var v:Vector.<Vector.<Number > > = bmp.histogram();
var r:Number = 0;
var g:Number = 0;
var b:Number = 0;
var a:Number = 0;
for (var i:uint=0; i<256; i++) {
r += i * v[0][i] / 255;
g += i * v[1][i] / 255;
b += i * v[2][i] / 255;
a += i*v[3][i]/255;
}
var totalPixels:uint = bmp.rect.width * bmp.rect.height;
r /= totalPixels;
g /= totalPixels;
b /= totalPixels;
a /= totalPixels;
var brightness:Number = (r+g+b)/3;
bmp.dispose();
return brightness * 2;
bmp.draw(图像);
bmp.draw(image.getChildAt(0));
变量v:向量bmp.histogram();
变量r:数值=0;
变量g:数值=0;
变量b:数值=0;
变量a:数值=0;
对于(var i:uint=0;ivar bmp:BitmapData=new-BitmapData(image.width/4,image.height/4,true,0x00000000);
bmp.draw(图像);
bmp.draw(image.getChildAt(0));
var v:Vector.=bmp.histogram();
变量r:数值=0;
变量g:数值=0;
变量b:数值=0;
变量a:数值=0;
对于(var i:uint=0;我知道你解决了你的问题吗?如果是的话,请把解决方案放在回答栏中,甚至你也可以接受它自己。这样社区就可以知道,这个问题已经解决了,答案也会对其他人有帮助。新用户不能立即回答他们自己的问题,所以我没有回答。我现在就试试。你解决了你的问题吗?如果是的话请将解决方案放在答案栏中,即使你们也可以接受它自己。这样社区就可以知道,这个问题已经解决了,答案也会对其他人有帮助。新用户不能立即回答他们自己的问题,所以我没有回答。我现在就试试。