Как нарисовать прямо на растровое изображение (BitmapSource, WriteableBitmap) в WPF? - PullRequest
8 голосов
/ 31 августа 2011

В GDI + Winforms я бы сделал:

Bitmap b = new Bitmap(32,32);
Graphics g = Graphics.FromImage(b); 
//some graphics code...`

Как сделать то же самое в WPF с DrawingContext?

Ответы [ 2 ]

7 голосов
/ 31 августа 2011

Вы можете использовать RenderTargetBitmap для рендеринга любого содержимого WPF в растровое изображение, поскольку оно само по себе является BitmapSource. При этом вы можете использовать стандартные операции рисования в WPF для «рисования» растрового изображения.

3 голосов
/ 24 октября 2018

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

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

        public static void CreateWpfImage()
        {
            int imageWidth = 100;
            int imageHeight = 100;
            string outputFile = "C:/Users/Krythic/Desktop/Test.png";
            // Create the Rectangle
            DrawingVisual visual = new DrawingVisual();
            DrawingContext context = visual.RenderOpen();
            context.DrawRectangle(Brushes.Red, null, new Rect(20,20,32,32));
            context.Close();

            // Create the Bitmap and render the rectangle onto it.
            RenderTargetBitmap bmp = new RenderTargetBitmap(imageWidth, imageHeight, 96, 96, PixelFormats.Pbgra32);
            bmp.Render(visual);

            // Save the image to a location on the disk.
            PngBitmapEncoder encoder = new PngBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(bmp));
            encoder.Save(new FileStream(outputFile, FileMode.Create));
        }

НасколькоЯ могу сказать, что RenderTargetBitmap считается ImageSource, поэтому вы должны иметь возможность связать его с источником изображения элементов управления wpf напрямую, без каких-либо преобразований.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...