0

G'day伙计们,

我已经开始探索 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();
    }
4

1 回答 1

0

显然这是预期的行为。

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

于 2016-03-01T19:20:32.600 回答