Desenho de Imagens usando Gráficos
Desenho de Imagens usando Gráficos
Com a biblioteca Aspose.PSD, você pode desenhar formas simples como linhas, retângulos e círculos, bem como formas complexas como polígonos, curvas, arcos e formas Bezier. A biblioteca Aspose.PSD cria essas formas usando a classe Graphics que está no namespace Aspose.PSD. Objetos Graphics são responsáveis por realizar diferentes operações de desenho em uma imagem, alterando assim a superfície da imagem. A classe Graphics usa uma variedade de objetos auxiliares para melhorar as formas:
· Pens, para desenhar linhas, contornos de formas ou renderizar outras representações geométricas.
· Brushes, para definir como áreas são preenchidas.
· Fonts, para definir a forma dos caracteres de texto.
Desenhar com a Classe Graphics
Abaixo está um exemplo de código demonstrando o uso da classe Graphics. O código de exemplo foi dividido em várias partes para mantê-lo simples e fácil de seguir. Passo a passo, os exemplos mostram como:
- Criar uma imagem.
- Criar e inicializar um objeto Graphics.
- Limpar a superfície.
- Desenhar uma elipse.
- Desenhar um polígono preenchido e salvar a imagem.
Exemplos de Programação
Criando uma Imagem
Comece criando uma imagem usando qualquer um dos métodos descritos em Criando Arquivos.
// 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()); | |
} |
Criar e Inicializar um Objeto Graphics
Em seguida, crie e inicialize um objeto Graphics passando o objeto Image para o seu construtor.
// 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); | |
} |
Limpar a Superfície
Limpe a superfície da Graphics chamando o método Clear da classe Graphics e passe a cor como parâmetro. Este método preenche a superfície da Graphics com a cor passada como argumento.
// 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()); | |
} |
Desenhar uma Elipse
Você pode observar que a classe Graphics expôs muitos métodos para desenhar e preencher formas. Você encontrará a lista completa de métodos na Referência da API Aspose.PSD para .NET. Há várias versões sobrecarregadas do método DrawEllipse expostas pela classe Graphics. Todos esses métodos aceitam um objeto Pen como seu primeiro argumento. Os parâmetros posteriores são passados para definir o retângulo delimitador em torno da elipse. Para este exemplo, use a versão que aceita um objeto Rectangle como segundo parâmetro para desenhar uma elipse usando o objeto Pen na cor desejada.
// 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()); | |
} |
Desenhar um Polígono Preenchido
Em seguida, desenhe um polígono usando o LinearGradientBrush e um array de pontos. A classe Graphics expôs várias versões sobrecarregadas do método FillPolygon(). Todas elas aceitam um objeto Brush como seu primeiro argumento, definindo as características do preenchimento. O segundo parâmetro é um array de pontos. Por favor, note que a cada dois pontos consecutivos no array especificam um lado do polígono.
// 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()); | |
} |
Desenho de Imagens usando Gráficos: Fonte Completa
// 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()); | |
} |
Todas as classes que implementam IDisposable e acessam recursos não gerenciados são instanciadas em uma instrução Using para garantir que sejam descartadas corretamente.