2010-02-12 26 views

Respuesta

4

Para hacer esto usted tendrá que buscar en el propio mapa de bits. El mecanismo de prueba de impacto de WPF considera que cualquier píxel pintado con un pincel "transparente" aún puede clicarse aunque sea invisible. Esto normalmente es algo bueno, pero se interpone en el camino de lo que estás tratando de hacer. Como un .png pinta con el pincel transparente, todo el .png se considera como pintado cuando se realiza una prueba de impacto.

Lo que hay que hacer en el controlador de eventos MouseMove es:

  1. Adelante e invocan golpeó probar la forma normal.
  2. Para cada HitTestResult vuelvas, comprobar para ver si se trata de una Image y si es así, si un píxel transparente se encuentra bajo el ratón
  3. Cuando se obtiene un éxito en un no-imagen o un píxel no transparente de una imagen, detente.
  4. decidir sobre un valor Cursor basado en lo que el ratón está sobre

Para determinar si un ratón está sobre un píxel transparente de una imagen:

  1. obtener la posición del ratón relativa a la imagen (e.GetPosition(image))
  2. Si está utilizando el estiramiento debe retroceder calcular el tramo en este punto para obtener un índice de mapa de bits
  3. uso BitmapSource.CopyPixels para copiar una recta de 1 píxel ngle en una matriz (es decir. sólo el único píxel el ratón está sobre)
  4. comprobar el valor de pixel que fue recuperada para ver si es un píxel transparente
+0

Esto es más o menos lo que hice y funciona muy bien. – TWith2Sugars

Cuestiones relacionadas