gpt4 book ai didi

wpf - 使用 RenderTargetBitmap 的 WPF Canvas 区域的快照

转载 作者:行者123 更新时间:2023-12-03 15:07:11 25 4
gpt4 key购买 nike

我想在我的应用程序中创建 Canvas 区域的快照。我正在使用 Visual Brush 来获取快照并使用 PngEncoder 进行保存。但是生成的 PNG 只是一个空的黑色图像。我不确定问题出在创建的 BitmapSource 还是 PNGEncoder 问题上。这是我用来获得相同的代码。

public void ConvertToBitmapSource(UIElement element)
{
var target = new RenderTargetBitmap((int)(element.RenderSize.Width), (int)(element.RenderSize.Height), 96, 96, PixelFormats.Pbgra32);
var brush = new VisualBrush(element);

var visual = new DrawingVisual();
var drawingContext = visual.RenderOpen();


drawingContext.DrawRectangle(brush, null, new Rect(new Point(0, 0),
new Point(element.RenderSize.Width, element.RenderSize.Height)));

drawingContext.Close();

target.Render(visual);

PngBitmapEncoder encoder = new PngBitmapEncoder();
BitmapFrame outputFrame = BitmapFrame.Create(target);
encoder.Frames.Add(outputFrame);
using (FileStream file = File.OpenWrite("TestImage.png"))
{
encoder.Save(file);
}

}

最佳答案

不确定为什么您的代码无法正常工作。这有效:

public void WriteToPng(UIElement element, string filename)
{
var rect = new Rect(element.RenderSize);
var visual = new DrawingVisual();

using (var dc = visual.RenderOpen())
{
dc.DrawRectangle(new VisualBrush(element), null, rect);
}

var bitmap = new RenderTargetBitmap(
(int)rect.Width, (int)rect.Height, 96, 96, PixelFormats.Default);
bitmap.Render(visual);

var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));

using (var file = File.OpenWrite(filename))
{
encoder.Save(file);
}
}

关于wpf - 使用 RenderTargetBitmap 的 WPF Canvas 区域的快照,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14118003/

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