从位图的非透明区域创建Region或GraphicsPath

时间:2011-09-30 20:24:27

标签: c# bitmap gdi+ region graphicspath

我想点击测试绘制的位图,看看给定的点是否在图像的非透明像素中可见。

例如,要对整个位图矩形进行此测试,您可以执行以下操作:

Bitmap bitmap = new Bitmap("filename.jpg");
GraphicsPath path = new GraphicsPath();
Rectangle bitmapRect = new Rectangle(x, y, bitmap.Width, bitmap.Height);

path.AddRectangle(bitmapRect);

if (path.IsVisible(mouseLocation))
    OnBitmapClicked();

但是,如果我有一个非矩形项的位图,并且我希望能够检查它们是否点击了非透明区域,那么.NET框架中是否有任何支持的方法来执行此操作? / p>

我能想到的唯一方法是将位图字节锁定到一个数组中,然后迭代它,将每个x,y坐标添加到一个Point结构数组中是不透明的。然后使用这些点结构来组装GraphicsPath。

由于这些点将从零开始,我需要使用绘制图像的x,y坐标和0,0之间的距离来偏移鼠标位置。但是这样我可以基本上为每个图像使用相同的GraphicsPath,如果我多次绘制它,只要图像没有偏斜或缩放不同。

如果这是唯一的好路线,我如何将这些点添加到GraphicsPath?从点到点画线?绘制一条闭合曲线?

1 个答案:

答案 0 :(得分:2)

恕我直言,更简单的技术是查看命中像素的alpha分量:

Color pixel = bitmap.GetPixel(mouseLocation.X, mouseLocation.Y);
bool hit = pixel.A > 0;