[英]WPF, merge 3 RenderTargetBitmap to one
嗨,我有一个问题。
我有一个方法(扩展),它获取 FrameworkElement 列表并从中创建图像,然后它应该从这些图像中创建一个图像并将其复制到剪贴板。
我的代码看起来像:
public static void CopyManyUiElementToClipboard(List<FrameworkElement> elements)
{
var images = new List<RenderTargetBitmap>();
elements.ForEach(element =>
{
double width = element.ActualWidth;
double height = element.ActualHeight;
var size = new Size(width, height);
var drawingContext = new DrawingVisual();
using (DrawingContext draw = drawingContext.RenderOpen())
{
var visualBrush = new VisualBrush(element);
draw.DrawRectangle(visualBrush, null, new Rect(new Point(), size));
}
var renderBitmap = new RenderTargetBitmap((int)size.Width, (int)size.Height,96d,96d,PixelFormats.Pbgra32);
var vRect = new Rectangle
{
Width = (int)size.Width,
Height = (int)size.Height,
Fill = Brushes.White
};
vRect.Arrange(new Rect(size));
renderBitmap.Render(vRect);
renderBitmap.Render(drawingContext);
images.Add(renderBitmap);
});
}
它从所有 ui 元素创建图像并将其添加到集合中,但我找不到创建图像的方法(当然是内存)。
如果我为每个循环将所有图像添加到剪贴板
Clipboard.SetImage(renderBitmap);
它复制最后一个图像(这是有道理的,这就是为什么我想从 3 个图像中创建单个图像)。
有任何想法吗?
好的,我找到了一种方法,对于任何感兴趣的人:
public static void CopyManyUiElementToClipboard(List<FrameworkElement> elements)
{
double totalWidth = elements.First().ActualWidth;
double totalHeight = elements.Sum(element => element.ActualHeight);
var size = new Size(totalWidth, totalHeight);
var rectangleFrame = new Rectangle
{
Width = (int)size.Width,
Height = (int)size.Height,
Fill = Brushes.White
};
rectangleFrame.Arrange(new Rect(size));
var renderBitmap = new RenderTargetBitmap((int)size.Width, (int)size.Height, 96d, 96d, PixelFormats.Pbgra32);
renderBitmap.Render(rectangleFrame);
var yPointCordinate = 0.0;
elements.ForEach(element =>
{
var drawingContext = new DrawingVisual();
using (DrawingContext draw = drawingContext.RenderOpen())
{
var visualBrush = new VisualBrush(element);
var elementSize = new Size(element.ActualWidth, element.ActualHeight);
draw.DrawRectangle(visualBrush, null, new Rect(new Point(0, yPointCordinate), elementSize));
}
yPointCordinate += element.ActualHeight;
renderBitmap.Render(drawingContext);
});
Clipboard.SetImage(renderBitmap);
}
作为参数函数采用 FrameworkElements 列表,它为每个元素创建单独的位图并使用 y 点操作呈现全图,例如取高你的最后一个元素并使其成为你新位图的起始 y 点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.