Я думаю, что здесь важно понимать, что на самом деле представляют собой 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);
}
}
}