2010-02-12 9 views

Odpowiedz

4

W tym celu trzeba będzie spojrzeć na samą bitmapę zrobić. Mechanizm testowania trafień WPF traktuje każdy piksel namalowany za pomocą "przezroczystego" pędzla, aby nadal był klikalny, mimo że był niewidoczny. Zwykle jest to dobra rzecz, ale przeszkadza w tym, co próbujesz zrobić. Ponieważ .png maluje za pomocą przezroczystego pędzla, cały .png jest uważany za pomalowany podczas testowania trafień.

Co trzeba zrobić w swojej obsługi zdarzeń MouseMove jest:

  1. Śmiało i powołać hit testowanie normalny sposób.
  2. Dla każdego HitTestResult wrócisz, sprawdź, czy jest to Image a jeśli tak, to czy przezroczysty piksel jest pod mysz
  3. Gdy pojawi się hitem na braku obrazu lub nieprzezroczystej piksela obraz, przestań.
  4. Zdecyduj się na wartości Cursor w oparciu o to, co mysz jest nad

Aby określić, czy mysz jest nad przezroczystego piksela obrazu:

  1. uzyskać pozycję myszy względem obrazu (e.GetPosition(image))
  2. Jeśli używasz rozciąganie trzeba back-obliczyć odcinek w tym momencie, aby uzyskać indeks bitmapę
  3. Przymież BitmapSource.CopyPixels aby skopiować Recta 1 piksela ngle w tablicy (np. tylko pojedynczy piksel mysz jest nad)
  4. Sprawdź wartość piksela, że ​​została pobrana, aby zobaczyć, czy jest to przezroczysty piksel
+0

To jest dość dużo, co zrobiłem i działa znakomicie. – TWith2Sugars