我正在尝试通过位图循环,并确定每个像素是否比使用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!");
         }
    }
}
有帮助吗?

解决方案

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

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)

其他提示

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

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

你知道如何继续:)

编辑:

在livedocs上(livedocs -bitmapdata -getPixel32()),您可以看到例如,从getPixel32()返回值获得r,g,b,值。也许您可以使用我:

另外,理查德的 回答 看起来它已经完成了您需要的工作,尽管如果您将其与上面的示例结合在一起-OVOILLA-您可以进行亮度比较:

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top