0
G'day Folks,Win2D库:使用Canvas坐标的CanvasImageBrush油漆?
我已经开始探索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();
}