7

透明な領域を含むpngがあり、それをimageタグに設定します。

画像の不透明な部分の上にカーソルがある場合、どうすればカーソルを手に設定できますか?

ありがとう

4

1 に答える 1

4

これを行うには、ビットマップ自体を確認する必要があります。WPFのヒットテストメカニズムでは、「透明な」ブラシでペイントされたピクセルは、非表示であってもクリック可能であると見なされます。これは通常は良いことですが、あなたがやろうとしていることの邪魔になります。.pngは透明なブラシでペイントするため、ヒットテストを行うと.png全体がペイントされたと見なされます。

MouseMoveイベントハンドラで行う必要があるのは次のとおりです。

  1. 先に進み、通常の方法でヒットテストを呼び出します。
  2. HitTestResult戻ってくるたびに、それがであるImageかどうかを確認し、そうである場合は、透明なピクセルがマウスの下にあるかどうかを確認します
  3. 画像または画像の不透明なピクセルにヒットした場合は、停止します。
  4. Cursorマウスの上にあるものに基づいて値を決定します

マウスが画像の透明なピクセルの上にあるかどうかを判断するには、次の手順に従います。

  1. 画像に対するマウスの位置を取得します(e.GetPosition(image)
  2. ストレッチを使用している場合は、ビットマップインデックスを取得するために、この時点でストレッチを逆算する必要があります
  3. 1ピクセルの長方形を配列にコピーするために使用BitmapSource.CopyPixelsします(つまり、マウスが置かれている単一のピクセルのみ)
  4. 取得したピクセル値をチェックして、透明ピクセルかどうかを確認します
于 2010-02-13T06:11:36.997 に答える