Могу ли я создать HRGN / CRgn, исключив все пурпурные пиксели в данном изображении? - PullRequest
0 голосов
/ 24 февраля 2011

Допустим, у меня есть изображение в CBitmap с цветом, обозначающим прозрачный пиксель (в моем случае это пурпурный).Могу ли я создать HRGN или CRgn для изображения, которое включает все пиксели, кроме пурпурного?

Ответы [ 2 ]

0 голосов
/ 24 февраля 2011

В самом простом случае вам нужно вызывать CreateRectRgn несколько раз, передавая однопиксельный прямоугольник для каждого пурпурного пикселя. Затем вы объедините эти регионы вместе, используя CombineRgn.

Очевидные оптимизации включают в себя:

  • с использованием секции DIB вместо GetPixel для сканирования исходного изображения.
  • ищет однорядные серии с одним и тем же пикселем, чтобы вы не комбинировали области 1 x 1.
  • ищет многострочные блоки одного и того же пикселя, чтобы вы не объединяли 1 x n областей.

Это сказало: зачем вам HRGN? Не могли бы вы преобразить исходное растровое изображение в растровое изображение маски?

0 голосов
/ 24 февраля 2011

Единственный способ сделать это - сканировать изображение, построчно сканировать пиксели и продолжать комбинировать пиксельные диапазоны в объект HRGN.

Вы захотите сделать это с DIBSection, так как вызов GetPixel довольно медленный.

...