0

假设我在 CBitmap 中有一个图像,其颜色表示透明像素(在我的情况下是洋红色)。我可以为包含除洋红色以外的所有像素的图像创建 HRGN 或 CRgn 吗?

4

2 回答 2

0

做到这一点的唯一方法是扫描图像,一次一行,扫描像素并继续将像素范围组合成一个 HRGN 对象。

您将希望使用 DIBSection 来执行此操作,因为调用 GetPixel 相当慢。

于 2011-02-24T12:14:53.967 回答
0

在最简单的情况下,您需要CreateRectRgn多次调用,为每个洋红色像素传递一个单像素矩形。然后,您可以使用 将这些区域组合在一起CombineRgn

明显的优化包括:

  • 使用 DIB 部分,而不是GetPixel扫描原始图像。
  • 寻找相同像素的单行运行,这样您就不会组合 1 x 1 区域。
  • 寻找相同像素的多行块,这样您就不会组合 1 x n区域。

也就是说:为什么需要 HRGN?您可以将原始位图转换为蒙版位图吗?

于 2011-02-24T13:26:13.757 回答