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

War es hilfreich?

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:

  1. Gehen Sie voran und rufen Sie auf, wie Sie auf normale Weise getestet werden.
  2. Für jeden HitTestResult Sie kommen zurück und prüfen Sie, ob es ein ist Image Und wenn ja, ob sich ein transparentes Pixel unter der Maus befindet
  3. Wenn Sie einen Treffer auf ein Nicht-Image oder ein nicht transparentes Pixel eines Bildes erhalten, stoppen Sie.
  4. 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:

  1. Holen Sie sich die Mausposition relativ zum Bild (e.GetPosition(image))
  2. Wenn Sie Stretching verwenden, müssen Sie an diesem Punkt die Strecke rückgängig machen, um einen Bitmap-Index zu erhalten
  3. Verwenden BitmapSource.CopyPixels Um ein 1-Pixel-Rechteck in ein Array zu kopieren (dh nur das einzelne Pixel der Maus ist vorbei)
  4. Überprüfen Sie den Pixelwert, der abgerufen wurde, um festzustellen, ob es sich um ein transparentes Pixel handelt
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top