7

我有一个包含透明区域的 png,并将其设置为图像标签。

当光标位于图像的不透明部分上时,如何将光标设置为手?

谢谢

4

1 回答 1

4

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

您需要在MouseMove事件处理程序中做的是:

  1. 继续并以正常方式调用命中测试。
  2. 对于HitTestResult你返回的每一个,检查它是否是一个Image,如果是,鼠标下方是否有一个透明像素
  3. 当您在图像的非图像或不透明像素上受到打击时,请停止。
  4. Cursor根据鼠标所在位置确定一个值

要确定鼠标是否在图像的透明像素上:

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