Tekenen van afbeeldingen met Graphics

Tekenen van afbeeldingen met Graphics

Met de Aspose.PSD-bibliotheek kunt u eenvoudige vormen tekenen zoals lijnen, rechthoeken en cirkels, maar ook complexe vormen zoals veelhoeken, curves, bogen en Bezier-vormen. De Aspose.PSD-bibliotheek maakt dergelijke vormen met behulp van de Graphics-klasse die zich bevindt in de Aspose.PSD-namespace. Graphics-objecten zijn verantwoordelijk voor het uitvoeren van verschillende tekenoperaties op een afbeelding, waardoor het oppervlak van de afbeelding verandert. De Graphics-klasse maakt gebruik van verschillende hulpobjecten om de vormen te verbeteren:

  • Pennen, om lijnen te trekken, vormen te omlijnen of andere geometrische voorstellingen te renderen.
  • Penselen, om te definiëren hoe gebieden worden ingekleurd.
  • Lettertypen, om de vorm van tekens van tekst te definiëren.

Teken met de Graphics-klasse

Hieronder vindt u een codevoorbeeld dat het gebruik van de Graphics-klasse demonstreert. De voorbeeldbroncode is opgesplitst in verschillende delen om het eenvoudig en gemakkelijk te volgen te houden. Stap voor stap tonen de voorbeelden hoe u:

  1. Een afbeelding maakt.
  2. Een Graphics-object maakt en initialiseert.
  3. Het oppervlak leegmaakt.
  4. Een ellips tekent.
  5. Een gevulde veelhoek tekent en de afbeelding opslaat.

Programmeermonsters

Een afbeelding maken

Begin met het maken van een afbeelding met een van de methoden die worden beschreven in Bestanden maken.

String dataDir = Utils.getDataDir(DrawingBezier.class) + "DrawingImages/";
// Create an instance of BmpOptions and set its various properties
String outpath = dataDir + "Bezier.bmp";
// Create an instance of BmpOptions and set its various properties
BmpOptions saveOptions = new BmpOptions();
saveOptions.setBitsPerPixel(32);
// Create an instance of Image
try (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.getYellow());
// Initializes the instance of PEN class with black color and width
Pen BlackPen = new Pen(Color.getBlack(), 3);
float startX = 10;
float startY = 25;
float controlX1 = 20;
float controlY1 = 5;
float controlX2 = 55;
float controlY2 = 10;
float endX = 90;
float endY = 25;
// Draw a Bezier shape by specifying the Pen object having black color and co-ordinate Points and save all changes.
graphic.drawBezier(BlackPen, startX, startY, controlX1, controlY1, controlX2, controlY2, endX, endY);
// export image to bmp file format.
image.save(outpath, saveOptions);
}

Maak en initialiseer een Graphics-object

Maak vervolgens een Graphics-object aan door het Image-object door te gegeven aan de constructor.

String dataDir = Utils.getDataDir(DrawingArc.class) + "DrawingImages/";
// Create an instance of BmpOptions and set its various properties
String outpath = dataDir + "Arc.bmp";
// Create an instance of BmpOptions and set its various properties
BmpOptions saveOptions = new BmpOptions();
saveOptions.setBitsPerPixel(32);
// Create an instance of Image
try (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.getYellow());
// 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.getBlack()), 0, 0, width, height, startAngle, sweepAngle);
// export image to bmp file format.
image.save(outpath, saveOptions);
}

Maak het oppervlak leeg

Maak het Graphics-oppervlak leeg door de Clear-methode van de Graphics-klasse aan te roepen en geef een kleur door als parameter. Deze methode vult het Graphics-oppervlak met de opgegeven kleur.

String dataDir = Utils.getDataDir(DrawingUsingGraphics.class) + "DrawingImages/";
// Create an instance of Image
try (PsdImage image = new PsdImage(500, 500)) {
Graphics graphics = new Graphics(image);
// Clear the image surface with white color and Create and initialize a Pen object with blue color
graphics.clear(Color.getWhite());
Pen pen = new Pen(Color.getBlue());
// 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));
LinearGradientBrush linearGradientBrush = new LinearGradientBrush(image.getBounds(), Color.getRed(), Color.getWhite(), 45f);
// graphics.fillPolygon(linearGradientBrush, new Point(200, 200), new Point(400, 200), new Point(250, 350));
Point[] points = {new Point(200, 200), new Point(400, 200), new Point(250, 350)};
graphics.fillPolygon(linearGradientBrush, points);
// export modified image.
image.save(dataDir + "DrawingUsingGraphics_output.bmp", new BmpOptions());
}

Teken een ellips

U zult merken dat de Graphics-klasse meerdere methoden heeft blootgesteld om vormen te tekenen en in te vullen. U vindt de volledige lijst met methoden in de Aspose.PSD voor Java API Reference. Er zijn verschillende overloadversies van de DrawEllipse-methode blootgesteld door de Graphics-klasse. Al deze methoden accepteren een Pen-object als eerste argument. De latere parameters dienen om het begrenzingskader rond de ellips te definiëren. Gebruik voor dit voorbeeld de versie die een Rectangle-object accepteert als tweede parameter om een ellips te tekenen met het Pen-object in de gewenste kleur.

String dataDir = Utils.getDataDir(DrawingEllipse.class) + "DrawingImages/";
// Create an instance of BmpOptions and set its various properties
String outpath = dataDir + "Ellipse.bmp";
// Create an instance of BmpOptions and set its various properties
BmpOptions saveOptions = new BmpOptions();
saveOptions.setBitsPerPixel(32);
// Create an instance of Image
try (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.getYellow());
// Draw a dotted ellipse shape by specifying the Pen object having red color and a surrounding Rectangle
graphic.drawEllipse(new Pen(Color.getRed()), new Rectangle(30, 10, 40, 80));
// Draw a continuous ellipse shape by specifying the Pen object having solid brush with blue color and a surrounding Rectangle
graphic.drawEllipse(new Pen(new SolidBrush(Color.getBlue())), new Rectangle(10, 30, 80, 40));
// export image to bmp file format.
image.save(outpath, saveOptions);
}

Teken een gevulde veelhoek

Teken vervolgens een veelhoek met gebruik van de LinearGradientBrush en een array van punten. De Graphics-klasse heeft verschillende overloadversies van de FillPolygon-methode blootgesteld. Al deze methoden accepteren een Brush-object als eerste argument, waarin de kenmerken van de vulling worden gedefinieerd. Het tweede argument is een array van punten. Let erop dat elk twee opeenvolgende punten in het array een zijde van de veelhoek specificeren.

String dataDir = Utils.getDataDir(DrawingUsingGraphics.class) + "DrawingImages/";
// Create an instance of Image
try (PsdImage image = new PsdImage(500, 500)) {
Graphics graphics = new Graphics(image);
// Clear the image surface with white color and Create and initialize a Pen object with blue color
graphics.clear(Color.getWhite());
Pen pen = new Pen(Color.getBlue());
// 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));
LinearGradientBrush linearGradientBrush = new LinearGradientBrush(image.getBounds(), Color.getRed(), Color.getWhite(), 45f);
// graphics.fillPolygon(linearGradientBrush, new Point(200, 200), new Point(400, 200), new Point(250, 350));
Point[] points = {new Point(200, 200), new Point(400, 200), new Point(250, 350)};
graphics.fillPolygon(linearGradientBrush, points);
// export modified image.
image.save(dataDir + "DrawingUsingGraphics_output.bmp", new BmpOptions());
}

Afbeeldingen tekenen met Graphics: Volledige broncode

String dataDir = Utils.getDataDir(DrawingUsingGraphics.class) + "DrawingImages/";
// Create an instance of Image
try (PsdImage image = new PsdImage(500, 500)) {
Graphics graphics = new Graphics(image);
// Clear the image surface with white color and Create and initialize a Pen object with blue color
graphics.clear(Color.getWhite());
Pen pen = new Pen(Color.getBlue());
// 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));
LinearGradientBrush linearGradientBrush = new LinearGradientBrush(image.getBounds(), Color.getRed(), Color.getWhite(), 45f);
// graphics.fillPolygon(linearGradientBrush, new Point(200, 200), new Point(400, 200), new Point(250, 350));
Point[] points = {new Point(200, 200), new Point(400, 200), new Point(250, 350)};
graphics.fillPolygon(linearGradientBrush, points);
// export modified image.
image.save(dataDir + "DrawingUsingGraphics_output.bmp", new BmpOptions());
}

Alle klassen die IDisposable implementeren en toegang hebben tot niet-beheerde resources, worden geïnstantieerd in een Using-verklaring om ervoor te zorgen dat ze correct worden verwijderd.