我需要一种超快速的方法来检查给定的Path
是否与给定的Rectangle
相交。
出于这个目的,我想到了这种方法,该方法“裁剪”给定矩形上的Path
,并检查在该区域中是否绘制了任何东西。
public static readonly CanvasDevice CanvasDev = CanvasDevice.GetSharedDevice();
private static readonly CanvasRenderTarget s_offScreen = new CanvasRenderTarget(CanvasDev, 10, 10, 96);
public static bool IsPathDrawnInsideRect(this CanvasGeometry geom, Vector2 offset, byte alphaThreshold)
{
if (geom == null)
return false;
using (CanvasDrawingSession ds = s_offScreen.CreateDrawingSession())
{
// do not forget clear buffer
ds.Clear(Colors.Transparent);
ds.DrawGeometry(geom, offset, Colors.Black);
}
byte[] bytes = s_offScreen.GetPixelBytes();
return bytes.Any(c => c > alphaThreshold);
}
该方法有效,并且非常准确(至少对我而言足够准确),但是不幸的是,语句s_offScreen.GetPixelBytes();
有时最多需要10毫秒才能执行,因此我需要完整的方法来保持1毫秒。
有没有一种更快的方法来检查给定的CanvasRenderTarget
是否包含ALPHA通道高于指定阈值的任何像素?
或者,如何配置CanvasRenderTarget
(以DirectXPixelFormat
和CanvasAlphaMode
而言)以在这种情况下获得最高性能?
谢谢!
答案 0 :(得分:0)
在UWP中,有a method that checks if two geometries intersect。
if (CanvasGeometry.CreateRectangle(CanvasDevice.GetSharedDevice(), rectangle).CompareWith(your_geometry) == CanvasGeometryRelation.Overlap)
{
//geometries intersect
}
请注意,该方法返回四个值之一。除了重叠,它们可以是不相交的,但是您的几何也可以包含在矩形中,或者矩形可以包含您的几何。