@IA-NE-ROBOT

C#-найти пиксель/группу пиксов в Bitmap?

Здравствуйте, есть некий bitmap, в котором нужно найти пиксель с определенным цветом. Ищу перебором:

for (int w = 0; w < bmap.Width; w++)
{
for (int h = 0; h < bmap.Height; h++)
{
clr_ = bmap.GetPixel(w, h).R + bmap.GetPixel(w, h).G + bmap.GetPixel(w, h).B;
.....
}
}
На картинке 1920x1080 перебор занимает около 5 сек. Как можно ускорить? Еще интересно, если поиск не 1 пикселя, а группы(спрайта)...
  • Вопрос задан
  • 605 просмотров
Решения вопроса 1
@IA-NE-ROBOT Автор вопроса
ну да, lockBits. Готовое решение было тут: www.cyberforum.ru/windows-forms/thread1045100.html
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
petermzg
@petermzg
Самый лучший программист
Используйте метод Bitmap.LockBits
Как применять тут
Ответ написан
Комментировать
alexsandr0000
@alexsandr0000
Программист C#/C++/C
Разбейте bitmap на сектора и каждый сектор обрабатывайте в отдельном потоке (ThreadPool, Parallel или Task с запуском дочерних заданий и возможностью отмены при нахождении) + как сказано выше, использование Bitmap.LockBits.
Ответ написан
Комментировать
@Forkfant
Как минимум не вызывайте bmap.GetPixel(w, h) три раза подряд. Лучше изменить код таким образом:
Color color = bmap.GetPixel(w, h);
clr_ = color.R + color.G + color.B;

А еще правильнее использовать Bitmap.LockBits, как предложил Петр.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы