问题
I have a png that contains transparent regions and I set it to the image tag but how am I able to set the cursor to a hand when it is over an opaque part of the image?
Thanks Tony
回答1:
To do this you will need to look at the bitmap itself. WPF's hit testing mechanism considers any pixel painted ith a "transparent" brush to still be clickable even though invisible. This is normally a good thing but gets in the way of what you're trying to do. Because a .png paints with the transparent brush, the entire .png is considerd as painted when doing hit testing.
What you need to do in your MouseMove
event handler is:
- Go ahead and invoke hit testing the normal way.
- For each
HitTestResult
you get back, check to see if it is anImage
and if so, whether a transparent pixel is under the mouse - When you get a hit on a non-image or a non-transparent pixel of an image, stop.
- Decide on a
Cursor
value based on what the mouse is over
To determine whether a the mouse is over a transparent pixel of an image:
- Get the mouse position relative to the image (
e.GetPosition(image)
) - If you're using stretching you must back-compute the stretch at this point to get a bitmap index
- Use
BitmapSource.CopyPixels
to copy a 1-pixel rectangle into an array (ie. only the single pixel the mouse is over) - Check the pixel value that was retrieved to see if it is a transparent pixel
来源:https://stackoverflow.com/questions/2250965/wpf-cursor-on-a-partially-transparent-image