2011-09-30 119 views
0

我想要命中 - 测试绘制的位图,以查看给定的点在图像的非透明像素中是否可见。从位图的非透明区域创建区域或图形路径

例如,做这个测试的整个位图的矩形,你会做这样的事情:

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?从点到点画线?画一条闭合的曲线?

回答

2

IMHO更简单的技术将是看命中像素的阿尔法分量:

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