2013-07-18 3 views
1

У меня есть этот код из StackOverflow ответов обнаружить яркие и темные изображенияDetect яркие и темные изображения

Проблема заключается в том, что она не работает, и я не знаю, почему.

, например, если слово

IsDark(bitmap, 40, 0.9); // this always sees the image as bright 

любое значение от 0,1 до 0,99 возвращается яркое изображение, и любое другое значение выше 0,99 возвращает все изображения, как темноте.

значение допуска кажется, не имеет никакого эффекта, даже если установить от 1 до 250.

// For fast access to pixels   
    public static unsafe byte[] BitmapToByteArray(Bitmap bitmap) 
    { 
     BitmapData bmd = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadOnly, 
             PixelFormat.Format32bppArgb); 
     byte[] bytes = new byte[bmd.Height * bmd.Stride]; 
     byte* pnt = (byte*)bmd.Scan0; 
     Marshal.Copy((IntPtr)pnt, bytes, 0, bmd.Height * bmd.Stride); 
     bitmap.UnlockBits(bmd); 
     return bytes; 
    } 

    public bool IsDark(Bitmap bitmap, byte tolerance, double darkProcent) 
    { 
     byte[] bytes = BitmapToByteArray(bitmap); 
     int count = 0, all = bitmap.Width * bitmap.Height; 
     for (int i = 0; i < bytes.Length; i += 4) 
     { 
      byte r = bytes[i + 2], g = bytes[i + 1], b = bytes[i]; 
      byte brightness = (byte)Math.Round((0.299 * r + 0.5876 * g + 0.114 * b)); 
      if (brightness <= tolerance) 
       count++; 
     } 
     return (1d * count/all) <= darkProcent; 
    } 
+0

Не является ли '0,9' в процентах? Я попробую передать более высокий 'darkPercent' .. вместо более высокой« толерантности ». –

+0

пользователь, разместивший образец кода, написал, что он должен работать с 0,9 процентным и 40 допустимыми значениями. Я пробовал любое другое значение от 1 до 100 за процент и все тот же результат. –

ответ

2

OK, после того, как раз, глядя на него, я заметил, что сравнение в конце функции выглядит в обратном направлении (на основе на имя переменной "darkProcent"). Я думаю, что оператор сравнения должен быть> =, а не < =.

Это дало мне ответы, которые я ожидал с помощью своих тестовых изображений.

+0

Я пробовал это, но, похоже, возвращает те же результаты, но в обратном направлении (под 0,99 процентным разрешением он возвращает темное изображение и более 1,0 возвращает яркое изображение). Какие параметры вы использовали? –

+0

ОК, у меня была ошибка при передаче изображения в IsDark, у него всегда было пустое растровое изображение, теперь оно работает. –

Смежные вопросы