2016-03-01 29 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方法轉換爲圖像上的一致點。