代码之家  ›  专栏  ›  技术社区  ›  TWith2Sugars

部分透明图像上的WPF光标

  •  7
  • TWith2Sugars  · 技术社区  · 15 年前

    我有一个包含透明区域的PNG,并将其设置为图像标记,但是当光标位于图像的不透明部分上时,如何将其设置为手?

    谢谢 托尼

    1 回复  |  直到 15 年前
        1
  •  4
  •   Ray Burns    15 年前

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

    你需要做的是 MouseMove 事件处理程序是:

    1. 继续以正常方式调用命中测试。
    2. 对于每一个 HitTestResult 你回去看看是不是 Image 如果是这样,那么透明像素是否位于鼠标下方
    3. 当你得到一个非图像或图像的非透明像素时,停止。
    4. 决定一个 Cursor 基于鼠标所在位置的值

    要确定鼠标是否位于图像的透明像素上,请执行以下操作:

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