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