2011-09-30 50 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; 
相關問題