部分透明图像上的WPF光标

TWi*_*ars 7 wpf transparency cursor wpf-4.0

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

谢谢托尼

Ray*_*rns 4

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

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

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

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

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