Um dies zu tun, Sie auf Bitmap selbst suchen müssen. Der WPF-Mechanismus zum Testen von Treffern betrachtet jedes Pixel, das mit einem "transparenten" Pinsel gemalt wurde, auch dann als anklickbar, wenn es unsichtbar ist. Dies ist normalerweise eine gute Sache, aber behindert das, was Sie versuchen zu tun. Da ein .png mit dem transparenten Pinsel malt, wird das gesamte .png beim Ausführen von Treffertests als gemalt betrachtet.
Was müssen Sie in Ihrem MouseMove
Event-Handler zu tun ist:
- Gehen Sie weiter und rufen Sie schlagen die normale Art und Weise zu testen.
- Für jeden
HitTestResult
Sie zurück, um zu sehen, ob es ein Image
ist und wenn ja, ob ein transparentes Pixel unter der Maus
- Wenn Sie erhalten einen Treffer auf einem Nicht-Bild oder einen nicht transparenten Pixeln ein Bild, hör auf.
- Entscheiden Sie sich für einen
Cursor
Wert auf das, was die Maus über ist
Um zu bestimmen, ob ein mit der Maus über ein transparentes Pixel eines Bildes ist:
- die Mausposition relativ zum Bild Get (
e.GetPosition(image)
)
- Wenn Sie mit Stretching müssen Sie die Strecke an dieser Stelle hinter berechnen einen Bitmap-Index erhalten
- verwenden
BitmapSource.CopyPixels
einen 1-Pixel recta kopieren ngles in ein Array (dh nur das einzelne Pixel mit der Maus über ist)
- den Pixelwert zu prüfen, die abgerufen wurde, um zu sehen, ob es ein transparentes Pixel
ist
Das ist ziemlich viel, was ich tat und funktioniert hervorragend. – TWith2Sugars