C # WPF Объединение нескольких растровых изображений в одно - PullRequest
0 голосов
/ 29 декабря 2018

Здравствуйте, я работаю над программой WPF для автоматизации процесса производства карт (я передаю информацию из базы данных, она выплевывает файлы изображений правильных размеров).

Эти карты состоят из 3-х эффективных "слоев", расположенных друг над другом, и должны давать примерно такой результат:

enter image description here

(если мне понадобится удалить его, я сделаю это, поскольку я только что получил изображение с правильным соотношением сторон).

Теперь я могу получить отдельные "слои" в виде собственных растровых изображений с чем-то вроде

//Get the filepath and store it in a variable named 'FilePath' before this
BitmapImage image =  new BitmapImage();
image.UriSource = (Uri)FilePath;

(я знаю, что код неправильный, но вы поняли идею).

Итак, вопрос в том, как мне объединить эти три растровых изображения вместе в одно растровое изображение, которое затем можно сохранить какскажем .png или такой.

Я знаю, что в WinForms гораздо больше встроенных опций для работы с изображениями и растровыми изображениями, но я делаю это в WPF.

Я думал о том, чтобы сделать это с помощью байтовых массивов и использовать циклы для копирования значений.от одного к другому, но любые лучшие предложения высоко ценятся.

1 Ответ

0 голосов
/ 29 декабря 2018

Я думаю, что здесь важно понимать, что на самом деле представляют собой WinForms и WPF.

WPF "не заменил" все, что есть в WinForms.WinForms - это, по сути, оболочка для базового API Windows GDI, который сам по себе все еще является очень современной технологией и, вероятно, останется таковым в обозримом будущем.

WPF заменяет рендеринг элементов графического интерфейса движком на основе DirectX.,Чтобы сделать это, он должен предоставить свои собственные классы изображений, но это исключительно для цели отображения в среде DirectX с аппаратным ускорением.

Это важное различие: WPF не- сама по себе, часть операционной системы Windows.Он использует DirectX для рендеринга, но сам DirectX предназначен для взаимодействия с графическим оборудованием, а не для прямого манипулирования изображениями (с некоторыми редкими исключениями, такими как обработка на GPU).GDI, однако, все еще является частью окон и был специально разработан для такого рода вещей, вплоть до дней рендеринга программного обеспечения.

Другими словами, если у вас нет оченьОсобые требования, связанные с аппаратным ускорением отображения, вы также можете использовать GDI.WPF и WinForms могут прекрасно сосуществовать друг с другом, потому что они делают совершенно разные вещи.Тот факт, что одна из вещей, которую делает WinForms, это использование более старой технологии рендеринга, которую вы не хотите использовать самостоятельно, не означает, что WinForms в целом устарела.

ОБНОВЛЕНИЕ: для использования функций GDI, которые выВам нужно будет добавить ссылку на System.Drawing ;Обычно это делается для вас, когда вы создаете проект Windows, но если вы создали консольное приложение и т. д., то вам нужно будет сделать это вручную. Графический класс предоставляет множество функций для рендеринга, но из того, что вы описали, это, вероятно, охватит большую часть того, что вы пытаетесь сделать:

using System.Drawing;
using System.Drawing.Imaging;

namespace yournamespace
{
    class Program
    {
        private static void Main(string[] args)
        {
            // load an image
            var source = new Bitmap("source.png");

            // create a target image to draw into
            var target = new Bitmap(1000, 1000, PixelFormat.Format32bppRgb);

            // get a context
            using (var graphics = Graphics.FromImage(target))
            {
                // draw an image into it, scaled to a different size
                graphics.DrawImage(source, new Rectangle(250, 250, 500, 500));

                // draw primitives
                using (var pen = new Pen(Brushes.Blue, 10))
                    graphics.DrawEllipse(pen, 100, 100, 800, 800);
            }

            // save the target to a file
            target.Save("target.png", ImageFormat.Png);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...