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