0

描画されたビットマップのヒット テストを行い、指定された Point が画像の非透明ピクセルに表示されるかどうかを確認したいと考えています。

たとえば、ビットマップ四角形全体に対してこのテストを行うには、次のようにします。

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 を組み立てます。

これらのポイントは 0 ベースであるため、マウスの位置を、画像が描画されている x、y 座標と 0、0 の間の距離でオフセットする必要があります。しかし、この方法では、画像が歪んでいないか、異なる方法でスケーリングされていない限り、画像を複数回描画する場合、基本的に各画像に同じ GraphicsPath を使用できます。

これが唯一の適切なルートである場合、ポイントを GraphicsPath に追加するにはどうすればよいですか? ポイントからポイントへ線を引きますか? 閉曲線を描く?

4

1 に答える 1

2

IMHOのより簡単な手法は、ヒットピクセルのアルファコンポーネントを調べることです。

Color pixel = bitmap.GetPixel(mouseLocation.X, mouseLocation.Y);
bool hit = pixel.A > 0;
于 2011-09-30T20:35:53.283 に答える