簡體   English   中英

保存位圖可移動畫布

[英]Saving Bitmap Moves The Canvas

我正在嘗試將畫布圖形另存為位圖。 該代碼可以正常工作,但是一旦保存了圖形,畫布就會移動到父應用程序的左上方。 我的代碼如下:

public void SaveBitmap()
    {
        Size size = new Size(canvas.ActualWidth, canvas.ActualHeight);
        canvas.Measure(size);
        canvas.Arrange(new Rect(size));

        RenderTargetBitmap renderBitmap =
            new RenderTargetBitmap(
                (int)size.Width,
                (int)size.Height,
                96d,
                96d,
                PixelFormats.Pbgra32);
        renderBitmap.Render(canvas);

        using (FileStream outStream = new FileStream("C:\\Users\\Darren\\Desktop\\test.bmp", FileMode.Create))
        {
            BmpBitmapEncoder encoder = new BmpBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
            encoder.Save(outStream);
        }


    }

導致問題的行是canvas.Arrange。 有人照亮了嗎?

謝謝。

原因是您沒有在Rect構造函數中指定任何位置,因此默認為(0,0)

我對使用RenderTargetBitmap建議是將Canvas放置在Grid ,然后在該外部Grid上執行UI所需的任何顯式定位,讓內部Canvas自然地在此父Grid內假定(0,0)的位置。

例如,如果您有:

<Window>
    <Canvas Left="10" Top="30" />
</Window>

更改為:

<Window>
    <Grid Left="10" Top="30">
        <Canvas />
    </Grid>
</Window>

然后,您可以完全取消對“ MeasureArrange調用。 但是,請確保仍將子Canvas傳遞給RenderTargetBitmap.Render方法,而不是父Grid

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM