Рисуване на изображения с помощта на Graphics

Рисуване на изображения с помощта на Graphics

С библиотеката Aspose.PSD можете да рисувате прости форми като линии, правоъгълници и кръгове, както и сложни форми като полигона, криви, дъги и Безиерови форми. Библиотеката Aspose.PSD създава такива форми, използвайки класа Graphics, който се намира в пространството на имена на Aspose.PSD. Обектите Graphics са отговорни за извършването на различни операции за рисуване на изображение, като по този начин променят повърхността на изображението. Класът Graphics използва различни помощни обекти, за да подобри формите:

  • Моливи, за рисуване на линии, обрисуване на форми или визуализация на други геометрични представления.
  • Четки, за дефиниране на начина, по който се попълват областите.
  • Шрифтове, за дефиниране на формата на символите на текста.

Рисуване с класа Graphics

По-долу е показан примерен код, демонстриращ използването на класа Graphics. Изходният код на примера е разделен на няколко части, за да бъде опростен и лесен за следване. Стъпка по стъпка примерите показват как да:

  1. Създайте изображение.
  2. Създайте и инициализирайте обект Graphics.
  3. Изчистете повърхността.
  4. Нарисувайте елипса.
  5. Нарисувайте пълно многоъгълник и запазете изображението.

Примери за програмиране

Създаване на изображение

Започнете със създаване на изображение, използвайки някоя от методите, описани в “Създаване на файлове”.

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

Изчистване на повърхността

Изчистете графичната повърхност, като извикате метода Clear на класа 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, за да се гарантира, че се изтриват правилно.