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;
    }

Первый ответ здесь должен дать вам представление... По сути, создайте холст комбинированного размера и затем разместите "плитки" соответствующим образом.

Слияние двух изображений в C#/.NET

Другие вопросы по тегам