2016-03-01 34 views
0

G'day Folks,Win2D库:使用Canvas坐标的CanvasImageBrush油漆?

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

我正在绘制一个椭圆,并使用先前定义的CanvasImageBrush填充它。它看起来被用作填充的坐标是基于绘制椭圆的屏幕坐标。

换句话说,左上角的椭圆看起来很好,但在页面上的其他地方,椭圆却充满了黑色。我设置了ExtendX和ExtendY属性“Wrap”来测试我的假设,并且绘制椭圆就好像它正在暴露画笔使用的平铺图像。

我附上了截图以显示行为。用于创建CanvasImageBrush的图像是一个包含三角形的162x148矩形。 screenshot showing brush behaviour

因为我无法想象这是预期的行为,所以我必须做些傻事。如果有人能指出什么,我会很感激。

下面是代码

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(); 
    } 

回答

0

显然,这是预期的行为。

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