[英]Win2D library: CanvasImageBrush paints using the Canvas coordinates?
同性恋者
我已经开始探索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();
}
显然,这是预期的行为。
若要使用CanvasImageBrush绘制一致的图像,需要使用.Transform方法转换为图像上的一致点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.