0

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

1 に答える 1

0

どうやらこれは予想される動作です。

CanvasImageBrush を使用して一貫した画像を描画するには、.Transform メソッドを使用して画像上の一貫した点に変換する必要があります。

于 2016-03-01T19:20:32.600 に答える