Рисование изображений с использованием Graphics
Рисование изображений с использованием Graphics
С библиотекой Aspose.PSD вы можете рисовать простые фигуры, такие как линии, прямоугольники и окружности, а также сложные фигуры, такие как многоугольники, кривые, дуги и фигуры Безье. Библиотека Aspose.PSD создает такие фигуры с помощью класса Graphics, который находится в пространстве имен Aspose.PSD. Объекты Graphics отвечают за выполнение различных операций рисования на изображении, меняя его поверхность. Класс Graphics использует различные вспомогательные объекты для улучшения фигур:
- Ручки, для рисования линий, контура фигур или отображения других геометрических представлений.
- Кисти, для определения заполнения областей.
- Шрифты, для определения формы символов текста.
Рисование с помощью класса Graphics
Ниже приведен пример кода, демонстрирующий использование класса Graphics. Исходный код примера разделен на несколько частей для упрощения и удобства следования. Шаг за шагом примеры показывают, как:
- Создать изображение.
- Создать и инициализировать объект Graphics.
- Очистить поверхность.
- Нарисовать эллипс.
- Нарисовать заполненный многоугольник и сохранить изображение.
Примеры программирования
Создание изображения
Начните с создания изображения, используя любой из методов, описанных в разделе Создание файлов.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string loadpath = dataDir + "sample.psd"; | |
string outpath = dataDir + "CoreDrawingFeatures.bmp"; | |
// Create an instance of Image | |
using (PsdImage image = new PsdImage(loadpath)) | |
{ | |
// load pixels | |
var pixels = image.LoadArgb32Pixels(new Rectangle(0, 0, 100, 10)); | |
for (int i = 0; i < pixels.Length; i++) | |
{ | |
// specify pixel color value (gradient in this case). | |
pixels[i] = i; | |
} | |
// save modified pixels. | |
image.SaveArgb32Pixels(new Rectangle(0, 0, 100, 10), pixels); | |
// export image to bmp file format. | |
image.Save(outpath, new BmpOptions()); | |
} |
Создание и инициализация объекта Graphics
Затем создайте и инициализируйте объект Graphics, передав объект Image в его конструктор.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string outpath = dataDir + "Arc.bmp"; | |
// Create an instance of BmpOptions and set its various properties | |
BmpOptions saveOptions = new BmpOptions(); | |
saveOptions.BitsPerPixel = 32; | |
// Create an instance of Image | |
using (Image image = new PsdImage(100, 100)) | |
{ | |
// Create and initialize an instance of Graphics class and clear Graphics surface | |
Graphics graphic = new Graphics(image); | |
graphic.Clear(Color.Yellow); | |
// Draw an arc shape by specifying the Pen object having red black color and coordinates, height, width, start & end angles | |
int width = 100; | |
int height = 200; | |
int startAngle = 45; | |
int sweepAngle = 270; | |
// Draw arc to screen and save all changes. | |
graphic.DrawArc(new Pen(Color.Black), 0, 0, width, height, startAngle, sweepAngle); | |
// export image to bmp file format. | |
image.Save(outpath, saveOptions); | |
} |
Очистка поверхности
Очистите поверхность Graphics, вызвав метод Clear класса Graphics и передав цвет в качестве параметра. Этот метод заполняет поверхность Graphics цветом, переданным в качестве аргумента.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Create an instance of Image | |
using (PsdImage image = new PsdImage(500, 500)) | |
{ | |
var graphics = new Graphics(image); | |
// Clear the image surface with white color and Create and initialize a Pen object with blue color | |
graphics.Clear(Color.White); | |
var pen = new Pen(Color.Blue); | |
// Draw Ellipse by defining the bounding rectangle of width 150 and height 100 also Draw a polygon using the LinearGradientBrush | |
graphics.DrawEllipse(pen, new Rectangle(10, 10, 150, 100)); | |
using (var linearGradientBrush = new LinearGradientBrush(image.Bounds, Color.Red, Color.White, 45f)) | |
{ | |
graphics.FillPolygon(linearGradientBrush, new[] { new Point(200, 200), new Point(400, 200), new Point(250, 350) }); | |
} | |
// export modified image. | |
image.Save(dataDir + "DrawingUsingGraphics_output.bmp", new BmpOptions()); | |
} |
Нарисовать эллипс
Вы можете заметить, что у класса Graphics есть много методов для рисования и заполнения фигур. Полный список методов можно найти в справочнике API Aspose.PSD для .NET. Класс Graphics предоставляет несколько перегруженных версий метода DrawEllipse. Все они принимают объект Pen в качестве первого аргумента. Последующие параметры передаются для определения ограничивающего прямоугольника вокруг эллипса. Для примера используйте версию, принимающую объект Rectangle в качестве второго параметра, чтобы нарисовать эллипс с использованием объекта Pen выбранного вами цвета.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string loadpath = dataDir + "sample.psd"; | |
string outpath = dataDir + "CoreDrawingFeatures.bmp"; | |
// Create an instance of Image | |
using (PsdImage image = new PsdImage(loadpath)) | |
{ | |
// load pixels | |
var pixels = image.LoadArgb32Pixels(new Rectangle(0, 0, 100, 10)); | |
for (int i = 0; i < pixels.Length; i++) | |
{ | |
// specify pixel color value (gradient in this case). | |
pixels[i] = i; | |
} | |
// save modified pixels. | |
image.SaveArgb32Pixels(new Rectangle(0, 0, 100, 10), pixels); | |
// export image to bmp file format. | |
image.Save(outpath, new BmpOptions()); | |
} |
Нарисовать заполненный многоугольник
Затем нарисуйте многоугольник, используя LinearGradientBrush и массив точек. Класс Graphics предоставляет несколько перегруженных версий метода FillPolygon(). Все они принимают объект Brush в качестве первого аргумента, определяя характеристики заливки. Второй параметр — это массив точек. Обратите внимание, что каждые две последовательные точки в массиве определяют сторону многоугольника.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Create an instance of Image | |
using (PsdImage image = new PsdImage(500, 500)) | |
{ | |
var graphics = new Graphics(image); | |
// Clear the image surface with white color and Create and initialize a Pen object with blue color | |
graphics.Clear(Color.White); | |
var pen = new Pen(Color.Blue); | |
// Draw Ellipse by defining the bounding rectangle of width 150 and height 100 also Draw a polygon using the LinearGradientBrush | |
graphics.DrawEllipse(pen, new Rectangle(10, 10, 150, 100)); | |
using (var linearGradientBrush = new LinearGradientBrush(image.Bounds, Color.Red, Color.White, 45f)) | |
{ | |
graphics.FillPolygon(linearGradientBrush, new[] { new Point(200, 200), new Point(400, 200), new Point(250, 350) }); | |
} | |
// export modified image. | |
image.Save(dataDir + "DrawingUsingGraphics_output.bmp", new BmpOptions()); | |
} |
Рисование изображений с использованием Graphics: Полный исходный код
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Create an instance of Image | |
using (PsdImage image = new PsdImage(500, 500)) | |
{ | |
var graphics = new Graphics(image); | |
// Clear the image surface with white color and Create and initialize a Pen object with blue color | |
graphics.Clear(Color.White); | |
var pen = new Pen(Color.Blue); | |
// Draw Ellipse by defining the bounding rectangle of width 150 and height 100 also Draw a polygon using the LinearGradientBrush | |
graphics.DrawEllipse(pen, new Rectangle(10, 10, 150, 100)); | |
using (var linearGradientBrush = new LinearGradientBrush(image.Bounds, Color.Red, Color.White, 45f)) | |
{ | |
graphics.FillPolygon(linearGradientBrush, new[] { new Point(200, 200), new Point(400, 200), new Point(250, 350) }); | |
} | |
// export modified image. | |
image.Save(dataDir + "DrawingUsingGraphics_output.bmp", new BmpOptions()); | |
} |
Все классы, реализующие IDisposable и имеющие доступ к неуправляемым ресурсам, инстанциируются в выражении Using, чтобы гарантировать их корректное освобождение.