gpt4 book ai didi

WPF:仅在非透明部分检测图像单击

转载 作者:行者123 更新时间:2023-12-04 05:26:59 24 4
gpt4 key购买 nike

我有一个 Image WPF 中的控件,其中包含具有大量透明像素的图像。现在,MouseDown事件在 Image每当我在 Image 的完整矩形区域内单击时触发控制。我想要一些方法来检测鼠标点击是否发生在图像的不透明部分。

这样做的最佳方法是什么?

最佳答案

使用 this answer 中的技术您可以从 Image 派生创建一个 OpaqueClickableImage仅对图像足够不透明区域中的 HitTest 做出响应:

public class OpaqueClickableImage : Image
{
protected override HitTestResult HitTestCore(PointHitTestParameters hitTestParameters)
{
var source = (BitmapSource)Source;

// Get the pixel of the source that was hit
var x = (int)(hitTestParameters.HitPoint.X / ActualWidth * source.PixelWidth);
var y = (int)(hitTestParameters.HitPoint.Y / ActualHeight * source.PixelHeight);

// Copy the single pixel into a new byte array representing RGBA
var pixel = new byte[4];
source.CopyPixels(new Int32Rect(x, y, 1, 1), pixel, 4, 0);

// Check the alpha (transparency) of the pixel
// - threshold can be adjusted from 0 to 255
if (pixel[3] < 10)
return null;

return new PointHitTestResult(this, hitTestParameters.HitPoint);
}
}

添加此类后,只需像普通图像一样使用它:
<utils:OpaqueClickableImage Name="image" Source="http://entropymine.com/jason/testbed/pngtrans/rgb8_t_bk.png" Stretch="None"/>

关于WPF:仅在非透明部分检测图像单击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4800597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com