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

Flash 确定getPixel()值是否大于或小于50%灰度,flash,actionscript-3,actionscript,getpixel,Flash,Actionscript 3,Actionscript,Getpixel,我试图循环浏览位图,并使用getPixel确定每个像素是比灰度亮还是比灰度暗。问题是,我不知道如何判断getPixel返回的值是比灰色更暗还是更亮 中性灰色约为0x8080或R:127、G:127、B:127。我需要如何修改下面的代码才能准确地确定这一点? 亮度是答案-此处需要数学和解释: 您知道如何继续: 编辑: 在livedocs上,您可以在示例中看到它们如何从getPixel32返回值中获取r、g、b值。也许你可以用i:] 此外,Richard's看起来已经满足了您的需求,不过如果您将其

我试图循环浏览位图,并使用getPixel确定每个像素是比灰度亮还是比灰度暗。问题是,我不知道如何判断getPixel返回的值是比灰色更暗还是更亮

中性灰色约为0x8080或R:127、G:127、B:127。我需要如何修改下面的代码才能准确地确定这一点?


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

您知道如何继续:

编辑:

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


此外,Richard's看起来已经满足了您的需求,不过如果您将其与上面的示例结合起来-voilla-您已经获得了亮度比较:

亮度是答案-需要数学知识并在此处进行解释:

您知道如何继续:

编辑:

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

此外,Richard's看起来已经满足了您的需要,尽管如果您将其与上面的示例结合起来-voilla-您已经有了一个亮度比较:

为了进一步扩展Adam's,您可以使用如下函数生成亮度值

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)
为了进一步扩展Adam的方法,可以使用如下函数生成亮度值

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)

我的部分问题是,我甚至不知道getPixel返回的值是什么格式。它们似乎不是标准的十六进制值。即使不知道这一点,任何与RGB值相关的亮度讨论都不会对我有帮助。@cmal getPixel以十六进制形式返回RGB值,getPixel32以十六进制形式返回ARGB值。如果值不是您期望的值,请检查您是否在正确的位置获得像素。我得到的值对我来说似乎不是标准的十六进制值。我希望非alpha十六进制值为6个字符,比如1AFF00,但我要返回的值是8421504、16777215、15790320等等。我不知道这种类型的价值代表什么,也不知道如何处理它。有人知道吗?我想你说不出来,我对数字颜色很陌生。我很确定现在我得到的值是十进制颜色,通过以下公式创建:r*65536+g*256+b。然而,我不知道如何解决这个公式,以获得R、G和B的单个3位数。一旦我有了这个公式,我就可以使用亮度公式进行设置。请帮帮我!cmal,数字是数字-1AFF00与1769216的数字相同,只是以16为基数而不是以10为基数显示。从getPixel获得的数字是常规颜色。要以十六进制格式显示它们,请尝试:trace bmd.getPixelx,y.toString16;我的部分问题是,我甚至不知道getPixel返回的值是什么格式。它们似乎不是标准的十六进制值。即使不知道这一点,任何与RGB值相关的亮度讨论都不会对我有帮助。@cmal getPixel以十六进制形式返回RGB值,getPixel32以十六进制形式返回ARGB值。如果值不是您期望的值,请检查您是否在正确的位置获得像素。我得到的值对我来说似乎不是标准的十六进制值。我希望非alpha十六进制值为6个字符,比如1AFF00,但我要返回的值是8421504、16777215、15790320等等。我不知道这种类型的价值代表什么,也不知道如何处理它。有人知道吗?我想你说不出来,我对数字颜色很陌生。我很确定现在我得到的值是十进制颜色,通过以下公式创建:r*65536+g*256+b。然而,我不知道如何解决这个公式,以获得R、G和B的单个3位数。一旦我有了这个公式,我就可以使用亮度公式进行设置。请帮帮我!cmal,数字是数字-1AFF00与1769216的数字相同,只是以16为基数而不是以10为基数显示。从getPixel获得的数字是常规颜色。要以十六进制格式显示它们,请尝试:trace bmd.getPixelx,y.toString16;非常简单:]一起,我们很有帮助:]非常简单:]一起,我们很有帮助:]