【问题标题】:WPF Cursor on a partially transparent image部分透明图像上的 WPF 光标
【发布时间】:2010-02-12 10:04:10
【问题描述】:

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

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

谢谢

【问题讨论】:

    标签: wpf transparency wpf-4.0 mouse-cursor


    【解决方案1】:

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

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

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

    判断鼠标是否在图像的透明像素上:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 2013-08-04
      • 1970-01-01
      • 2012-02-24
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      相关资源
      最近更新 更多