C# объединяет множество изображений - классы WPF Imaging
Здравствуйте, я объединяю много плиток в одно большое изображение. Складывая это руководство: http://www.switchonthecode.com/tutorials/combining-images-with-csharp оно работает нормально, но только если размер конечного изображения не слишком велик (иначе я получаю) Параметр недопустим. "ошибка).. Так что, гуглив, я прочитал, что лучше использовать классы WPF Imaging, но я не могу найти способ сделать это...
Может кто-нибудь указать мне учебник или сказать мне, как это сделать?
Спасибо!!
1 ответ
Я знаю, что это старый вопрос, но только что столкнулся с этой проблемой с WPF, и ни одно из решений, которые я нашел, напрямую не ответило на вопрос, но приведенный ниже метод объединяет список BitmapSource, поэтому выходное изображение - это максимальные размеры изображений в списке:
public static BitmapSource MergeImages(IList<BitmapSource> bmpSrcList) {
int width = 0,height = 0,dpiX = 0,dpiY = 0;
// Get max dimensions and dpi of the images
foreach (var image in bmpSrcList) {
width = Math.Max(image.PixelWidth,width);
height = Math.Max(image.PixelHeight, height);
dpiX = Math.Max((int)image.DpiX, dpiX);
dpiY = Math.Max((int)image.DpiY, dpiY);
}
var renderTargetBitmap = new RenderTargetBitmap(width, height, dpiX, dpiY, PixelFormats.Pbgra32);
var drawingVisual = new DrawingVisual();
using (var drawingContext = drawingVisual.RenderOpen()) {
foreach (var image in bmpSrcList) {
drawingContext.DrawImage(image, new Rect(0, 0, width, height));
}
}
renderTargetBitmap.Render(drawingVisual);
return renderTargetBitmap;
}
Первый ответ здесь должен дать вам представление... По сути, создайте холст комбинированного размера и затем разместите "плитки" соответствующим образом.