gpt4 book ai didi

c# - 从 UIElement 获取图像被裁剪到显示大小

转载 作者:行者123 更新时间:2023-11-30 18:03:38 26 4
gpt4 key购买 nike

我正在使用这段代码拍摄一个 wpf 控件的图像:

BitmapEncoder imgEncoder = new PngBitmapEncoder();
RenderTargetBitmap bmpSource = new RenderTargetBitmap((int)element.ActualWidth, (int)element.ActualHeight, 150, 150, PixelFormats.Pbgra32);
bmpSource.Render(element);
imgEncoder.Frames.Add(BitmapFrame.Create(bmpSource));
using (MemoryStream ms = new MemoryStream())
{
imgEncoder.Save(ms);
bytes = ms.ToArray();
ms.Position = 0;
Image i = Image.FromStream(ms);
i.Save(@"C:\" + Guid.NewGuid().ToString() + "LARGE.png");
}

问题是 ActualHeight/Width 属性给出渲染的高度和宽度,即显示部分。我想保存整个控件的图像,即使某些控件在屏幕上不可见,即它被放置在滚动查看器中。

如何获取控件的完整大小/高度,以便 bmpSource.Render() 将整个控件呈现为图像?

最佳答案

     private static void SaveUsingEncoder(string fileName, FrameworkElement UIElement, BitmapEncoder encoder)
{
int height = (int)UIElement.ActualHeight;
int width = (int)UIElement.ActualWidth;

// These two line of code make sure that you get completed visual bitmap.
// In case your Framework Element is inside the scroll viewer then some part which is not
// visible gets clip.
UIElement.Measure(new System.Windows.Size(width, height));
UIElement.Arrange(new Rect(new System.Windows.Point(), new Point(width, height)));

RenderTargetBitmap bitmap = new RenderTargetBitmap(width,

height,
96, // These decides the dpi factors
96,// The can be changed when we'll have preview options.
PixelFormats.Pbgra32);
bitmap.Render(UIElement);

SaveUsingBitmapTargetRenderer(fileName, bitmap, encoder);
}


private static void SaveUsingBitmapTargetRenderer(string fileName, RenderTargetBitmap renderTargetBitmap, BitmapEncoder bitmapEncoder)
{
BitmapFrame frame = BitmapFrame.Create(renderTargetBitmap);
bitmapEncoder.Frames.Add(frame);
// Save file .
using (var stream = File.Create(fileName))
{
bitmapEncoder.Save(stream);
}
}

调用这个函数为

     SaveUsingEncoder(fileName, frameworkElement, new PngBitmapEncoder());

希望这会有所帮助。

关于c# - 从 UIElement 获取图像被裁剪到显示大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7039031/

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