У меня есть этот код из 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,9' в процентах? Я попробую передать более высокий 'darkPercent' .. вместо более высокой« толерантности ». –
пользователь, разместивший образец кода, написал, что он должен работать с 0,9 процентным и 40 допустимыми значениями. Я пробовал любое другое значение от 1 до 100 за процент и все тот же результат. –