繁体   English   中英

Win2D库:CanvasImageBrush使用Canvas坐标绘制吗?

[英]Win2D library: CanvasImageBrush paints using the Canvas coordinates?

同性恋者

我已经开始探索Windows 10 UAP应用程序的Win2D库。

我正在绘制一个椭圆,并使用以前定义的CanvasImageBrush对其进行填充。 看起来用作填充的坐标基于绘制椭圆的屏幕坐标。

换句话说,左上角的椭圆看起来不错,但是在页面的其他地方,椭圆填充有黑色。 我将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();
    }

显然,这是预期的行为。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM