WPF Cursor auf einem teilweise transparenten Bild
-
20-09-2019 - |
Frage
Ich habe ein PNG, das transparente Regionen enthält, und ich setze es auf das Bild -Tag, aber wie kann ich den Cursor auf eine Hand setzen, wenn es über einem undurchsichtigen Teil des Bildes liegt?
Danke Tony
Lösung
Dazu müssen Sie sich die Bitmap selbst ansehen. Der Hit -Testmechanismus von WPF berücksichtigt jedes Pixel, das mit einem "transparenten" Pinsel gestrichen wurde, um immer noch unsichtbar zu klicken. Dies ist normalerweise eine gute Sache, steht aber dem, was Sie versuchen zu tun. Da ein .png mit dem transparenten Pinsel lackiert, wird das gesamte .png bei der Trefferprüfung als gemalt angesehen.
Was Sie in Ihrem tun müssen MouseMove
Event -Handler ist:
- Gehen Sie voran und rufen Sie auf, wie Sie auf normale Weise getestet werden.
- Für jeden
HitTestResult
Sie kommen zurück und prüfen Sie, ob es ein istImage
Und wenn ja, ob sich ein transparentes Pixel unter der Maus befindet - Wenn Sie einen Treffer auf ein Nicht-Image oder ein nicht transparentes Pixel eines Bildes erhalten, stoppen Sie.
- Entscheiden für a
Cursor
Wert basierend auf dem, was die Maus ist
Um festzustellen, ob eine Maus über ein transparentes Pixel eines Bildes ist:
- Holen Sie sich die Mausposition relativ zum Bild (
e.GetPosition(image)
) - Wenn Sie Stretching verwenden, müssen Sie an diesem Punkt die Strecke rückgängig machen, um einen Bitmap-Index zu erhalten
- Verwenden
BitmapSource.CopyPixels
Um ein 1-Pixel-Rechteck in ein Array zu kopieren (dh nur das einzelne Pixel der Maus ist vorbei) - Überprüfen Sie den Pixelwert, der abgerufen wurde, um festzustellen, ob es sich um ein transparentes Pixel handelt