Как и алгоритм поиска строк Бойера-Мура , если элемент, который вы просматриваете, не является частью того, что вы ищете, вы можете пропустить весь размер того, что вы ищете. В вашем случае вы можете проверить, является ли данный пиксель черным. Если это не так, вы можете пропустить 50 пикселей вперед. Если это так, у вас есть небольшая коробка для поиска вашего черного квадрата.
Однако в этом случае вам может не понадобиться ничего сложного. Я предполагаю, что если ваш алгоритм слишком медленный, это потому, что вы вызываете функцию GetPixel
миллион раз, а , что - медленная часть. Если вы можете поместить свои пиксели в двумерный массив, ваш алгоритм, вероятно, будет работать достаточно быстро, чтобы его не нужно было переписывать.
Предполагая, что вы используете System.Drawing.Bitmap
, посмотрите документацию LockBits
, чтобы увидеть небольшой пример, включающий копирование растрового изображения в одномерный массив для сверхбыстрого доступа.