部分透明图像上的WPF光标

时间:2010-02-12 10:04:11

标签: wpf cursor transparency wpf-4.0

我有一个包含透明区域的png,我把它设置为图像标签,但是当它在图像的不透明部分上方时,如何将光标设置为手?

由于 贝

1 个答案:

答案 0 :(得分:4)

要执行此操作,您需要查看位图本身。 WPF的命中测试机制认为任何涂有“透明”画笔的像素即使看不见也仍然可以点击。这通常是一件好事,但会妨碍你想要做的事情。因为.png使用透明画笔进行绘画,所以在进行点击测试时,整个.png都会被视为绘画。

您需要在MouseMove事件处理程序中执行以下操作:

  1. 继续以正常方式调用命中测试。
  2. 对于您回来的每个HitTestResult,请检查它是否为Image,如果是,则检查透明像素是否在鼠标下
  3. 如果您对图像的非图像或非透明像素进行了点击,请停止。
  4. 根据鼠标悬停的内容确定Cursor
  5. 确定鼠标是否在图像的透明像素上:

    1. 获取相对于图像的鼠标位置(e.GetPosition(image)
    2. 如果您正在使用拉伸,则必须在此时反向计算拉伸以获得位图索引
    3. 使用BitmapSource.CopyPixels将1像素矩形复制到数组中(即只有鼠标所在的单个像素)
    4. 检查检索到的像素值以查看它是否为透明像素