2010-02-12 13 views

Antwort

4

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:

  1. Gehen Sie weiter und rufen Sie schlagen die normale Art und Weise zu testen.
  2. 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
  3. Wenn Sie erhalten einen Treffer auf einem Nicht-Bild oder einen nicht transparenten Pixeln ein Bild, hör auf.
  4. Entscheiden Sie sich für einen Cursor Wert auf das, was die Maus über
  5. ist

Um zu bestimmen, ob ein mit der Maus über ein transparentes Pixel eines Bildes ist:

  1. die Mausposition relativ zum Bild Get (e.GetPosition(image))
  2. Wenn Sie mit Stretching müssen Sie die Strecke an dieser Stelle hinter berechnen einen Bitmap-Index erhalten
  3. verwenden BitmapSource.CopyPixels einen 1-Pixel recta kopieren ngles in ein Array (dh nur das einzelne Pixel mit der Maus über ist)
  4. den Pixelwert zu prüfen, die abgerufen wurde, um zu sehen, ob es ein transparentes Pixel
ist
+0

Das ist ziemlich viel, was ich tat und funktioniert hervorragend. – TWith2Sugars

Verwandte Themen