حدد ما إذا كانت قيمة getPixel () أكبر من أو أقل من 50 ٪ رمادية
-
22-09-2019 - |
سؤال
أحاول أن أحلق من خلال صورة نقطية وتحديد ما إذا كان كل بكسل أخف أو أغمق من الرمادي باستخدام 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 ()) ، يمكنك أن ترى في المثال ، كيف تحصل على قيمة الإرجاع R ، G ، B ، B ، من GetPixel32 (). ربما يمكنك استخدام I:
أيضا ، ريتشارد إجابه يبدو أنه يفعل بالفعل ما تحتاجه ، على الرغم من أنك إذا قمت بدمجه مع مثال من الأعلى - Voilla - فقد حصلت على مقارنة لإصاعي: