C# Win2D库:CanvasImageBrush使用画布坐标绘制?

C# Win2D库:CanvasImageBrush使用画布坐标绘制?,c#,windows,win-universal-app,win2d,C#,Windows,Win Universal App,Win2d,G'day的朋友们 我已经开始探索Windows10UAP应用程序的Win2D库 我画了一个椭圆,并用之前定义的画布画笔填充它。看起来用作填充的坐标基于绘制椭圆的屏幕坐标 换句话说,左上角的椭圆看起来不错,但页面的其他地方,椭圆被黑色填充。我设置了ExtendX和ExtendY属性“Wrap”来检验我的假设,椭圆的绘制就好像它暴露了画笔使用的平铺图像一样 我附上了一张截图来显示这种行为。用于创建CanvasImageBrush的图像是一个包含三角形的162x148矩形 既然我无法想象这是预期的行

G'day的朋友们

我已经开始探索Windows10UAP应用程序的Win2D库

我画了一个椭圆,并用之前定义的画布画笔填充它。看起来用作填充的坐标基于绘制椭圆的屏幕坐标

换句话说,左上角的椭圆看起来不错,但页面的其他地方,椭圆被黑色填充。我设置了ExtendX和ExtendY属性“Wrap”来检验我的假设,椭圆的绘制就好像它暴露了画笔使用的平铺图像一样

我附上了一张截图来显示这种行为。用于创建CanvasImageBrush的图像是一个包含三角形的162x148矩形

既然我无法想象这是预期的行为,我一定是在做傻事。如果有人能指出是什么,我将不胜感激

这是密码

public sealed partial class MainPage : Page
{
    CanvasImageBrush fillBrush;
    List<Vector2> selectedPoints = new List<Vector2>();

    public MainPage()
    {
        this.InitializeComponent();
    }

    async Task CreateBrushes( CanvasControl sender )
    {
        CanvasBitmap cb = await CanvasBitmap.LoadAsync(sender, "Assets\\bitmapBrush.png");
        fillBrush = new CanvasImageBrush(sender, cb );
        fillBrush.ExtendX = CanvasEdgeBehavior.Wrap;
        fillBrush.ExtendY = CanvasEdgeBehavior.Wrap;
    }

    private void CanvasControl_CreateResources(CanvasControl sender, Microsoft.Graphics.Canvas.UI.CanvasCreateResourcesEventArgs args)
    {
        args.TrackAsyncAction(CreateBrushes(sender).AsAsyncAction());
    }

    private void CanvasControl_Draw(CanvasControl sender, Microsoft.Graphics.Canvas.UI.Xaml.CanvasDrawEventArgs args)
    {
        foreach( Vector2 v in selectedPoints )
        {
            args.DrawingSession.FillEllipse( v, 25, 25, fillBrush );
        }
    }

    private void MainCanvas_PointerPressed(object sender, PointerRoutedEventArgs e)
    {
        PointerPoint p = e.GetCurrentPoint((CanvasControl)sender);
        Vector2 v = new Vector2((float)p.Position.X, (float)p.Position.Y);

        selectedPoints.Add(v);

        MainCanvas.Invalidate();
    }
公共密封部分类主页面:第页
{
画布画笔;
List selectedPoints=新建列表();
公共主页()
{
this.InitializeComponent();
}
异步任务CreateBrusks(CanvasControl发送器)
{
CanvasBitmap cb=wait CanvasBitmap.LoadAsync(发送方,“Assets\\bitmapBrush.png”);
fillBrush=新画布图像笔刷(发送方,cb);
fillBrush.ExtendX=CanvasEdgeBehavior.Wrap;
fillBrush.ExtendY=CanvasEdgeBehavior.Wrap;
}
私有void CanvasControl_CreateResources(CanvasControl发件人,Microsoft.Graphics.Canvas.UI.CanvasCreateResourcesEventArgs)
{
args.TrackAsyncAction(createBrush(sender.asAsAsAsyncAction());
}
私有void CanvasControl_Draw(CanvasControl发送方,Microsoft.Graphics.Canvas.UI.Xaml.canvasdainertargs)
{
foreach(选定点中的矢量2 v)
{
参数DrawingSession.FillEllipse(v,25,25,fillBrush);
}
}
private void MainCanvas_PointerPressed(对象发送方,PointErroroutedEventArgs e)
{
PointerPoint p=e.GetCurrentPoint((CanvasControl)发送方);
向量2 v=新向量2((浮动)p.Position.X,(浮动)p.Position.Y);
选择的点。添加(v);
maincavans.Invalidate();
}

显然这是预期的行为

要使用CanvasImageBrush绘制一致的图像,需要使用.Transform方法转换为图像上的一致点