1

我正在尝试遍历位图并使用 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!");
         }
    }
}
4

2 回答 2

5

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

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)
于 2010-03-29T07:58:02.583 回答
3

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

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

你知道如何继续:)

编辑:

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

此外,Richard 的回答看起来已经满足了您的需求,尽管如果您将其与上面的示例结合起来 - 瞧 - 您已经对自己进行了亮度比较:]

于 2010-03-28T22:00:07.160 回答