حدد ما إذا كانت قيمة getPixel () أكبر من أو أقل من 50 ٪ رمادية

StackOverflow https://stackoverflow.com/questions/2534735

سؤال

أحاول أن أحلق من خلال صورة نقطية وتحديد ما إذا كان كل بكسل أخف أو أغمق من الرمادي باستخدام 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 - فقد حصلت على مقارنة لإصاعي:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top