gpt4 book ai didi

c# - 如何将巨大 Canvas 的一部分导出为 PNG

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:44 26 4
gpt4 key购买 nike

我需要将 Canvas 导出到多个 PNG 文件。尝试将整个 Canvas 导出为图像,然后由于生成图像的大小(大约 20.000 像素 x 5.000 像素)裁剪图像失败。

现在的策略是将主 Canvas 分割成更小的部分,然后将每个单独的部分导出到图像中。但是,生成的图像不会显示其下方主 Canvas 中的图像。

有什么想法吗?下面是测试Canvas分割的代码(真实的比1024x1024大很多):

public void TestPrintPartOfCanvas()
{
//the main canvas
var main = new Canvas();
main.Width = 1024;
main.Height = 1024;
main.Background = Brushes.Blue;

//place something inside the canvas
var redRect = new System.Windows.Shapes.Rectangle();
redRect.Fill = Brushes.OrangeRed;
redRect.Width = 128;
redRect.Height = 128;

main.Children.Add(redRect);

// reset current transform (in case it is scaled or rotated)
var transform = main.LayoutTransform;
main.LayoutTransform = null;

// Get the size of canvas
var size = new Size(main.Width, main.Height);

//representing the first part of the main canvas
var part = new Canvas();
part.Width = 256;
part.Height = 256;
part.Background = Brushes.Transparent;

main.Children.Add(part);

// Measure and arrange the surface
main.Measure(size);
main.Arrange(new Rect(size));

// Create a render bitmap and push the part to it
var renderBitmap = new RenderTargetBitmap((int)part.Width, (int)part.Height, 96d, 96d, PixelFormats.Pbgra32);
renderBitmap.Render(part);

// Create a file stream for saving image
using (var outStream = new FileStream("p:/part.png", FileMode.Create))
{
// Use png encoder for our data
var encoder = new PngBitmapEncoder();
// push the rendered bitmap to it
encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
// save the data to the stream
encoder.Save(outStream);
}

// Restore previously saved layout
main.LayoutTransform = transform;
}

最佳答案

您可以通过调整排列矩形轻松裁剪 Canvas 的一部分:

var size = new Size(main.Width, main.Height);
main.Measure(size);

var cropOffset = new Point(-256, -256);
main.Arrange(new Rect(cropOffset, size));

var renderBitmap = new RenderTargetBitmap(256, 256, 96d, 96d, PixelFormats.Pbgra32);
renderBitmap.Render(main);

上面的代码在位置 256,256 处裁剪了一个 256x256 的矩形。

关于c# - 如何将巨大 Canvas 的一部分导出为 PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29499505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com