从位图的非透明区域创建区域或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框架中是否有任何支持的方式来做到这一点?

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

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

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

更简单的方法是查看命中像素的alpha分量:

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

最新更新