确定getPixel()值是否大于或小于50%灰色

时间:2010-03-28 21:57:52

标签: flash actionscript-3 actionscript getpixel

我正在尝试循环一个位图,并使用getPixel()确定每个像素是否比灰色更亮或更暗。问题是,我不知道如何判断getPixel()返回的值是否比灰色更暗或更亮。

中性灰色约为0x808080或R:127,G:127,B:127。我如何修改下面的代码以准确地确定这个?

for (var dx:int=0; dx < objectWidth; dx++)
{  
    for (var dy:int=0; dy < objectHeight; dy++)
    {
         if (testBmd.getPixel(dx, dy) > GRAY)
         {
             trace("Lighter than gray!");
         } else {
             trace("Darker than gray!");
         }
    }
}

2 个答案:

答案 0 :(得分:5)

为了进一步扩展Adam的answer,您可以使用这样的函数生成亮度值...

function luminance(myRGB:int):int {
//returns a luminance value between 0 and 255
var R:int = (myRGB / 65536) % 256;
var G:int = (myRGB / 256) % 256;
var B:int = myRGB % 256;
return ((0.3*R)+(0.59*G)+(0.11*B));
}

然后你可以测试你的50%灰度阈值:

if (luminance(testBmd.getPixel(dx, dy)) > 127)

答案 1 :(得分:3)

亮度是答案 - 数学需要和解释:

http://www.scantips.com/lumin.html

你知道如何继续:)

编辑:

on livedocs(livedocs - BitmapData - getPixel32()),您可以在示例中看到它们如何从getPixel32()返回值获得r,g,b值。也许你可以使用i:]

另外,理查德的answer看起来已经完成了你需要的工作,不过如果你把它与上面的例子结合起来 - 你可以自己进行亮度比较:]