Neste artigo, vou mostrar como podemos criar imagens via código usando a linguagem VB .NET em uma aplicação Windows Forms.
Gráficos e imagens são uma forma muito usada para representar dados em um formato estruturado e existem diversas formas de gerar gráficos e tabelas na plataforma .NET.
A plataforma .NET oferece o controle .NET Chart Control para criar gráficos de diversos formatos e eu já publiquei diversos artigos sobre o assunto. Além disso, podemos também criar gráficos e tabelas em tempo de execução usando as classes disponíveis no namespace System.Drawing.
Como cada gráfico ou tabela/imagem é exibido como uma imagem, assim, precisamos saber como criar imagens usando a plataforma .NET. Uma forma de fazer isso é usar as classes BitMap e Graphics, que também estão presentes no namespace System.Drawing.
A classe Graphics encapsula o GDI+ e permite desenhar em uma superfície: formulário, controle etc, usando seus principais métodos e propriedades. Usar os recursos do GDI+ é a maneira de desenhar formas, fontes, imagens ou geralmente qualquer coisa gráfica na plataforma .NET.
Os namespaces em GDI + são:
-
System.Drawing – Este é o principal namespace GDI+. Ele define objetos para a renderização base (fontes, canetas, escovas básicas etc) e o objeto mais importante: Graphics;
-
System.Drawing.Drawing2D – Permite usar objetos para gráficos bidimensionais vetoriais. Alguns deles são escovas de inclinação, canetas e transformações geométricas;
-
System.Drawing.Imaging – Usado para mudar imagens gráficas – ou seja, alterar a paleta, o metadados do extrato de imagem, manipular metafiles e assim por diante;
-
System.Drawing.Printing – Usado para renderizar imagens para a página da impressão, interagir com a própria impressora e formatar a aparência geral de um trabalho de impressão;
O lugar para começar com GDI + é o objeto Graphics. Embora as coisas que você desenha apareçam em seu monitor ou em uma impressora, o objeto Graphics é a “tela” onde você desenha.
Vou começar criando uma imagem em tempo de execução em um projeto Windows Forms.
Recursos usados: Visual Studio Community 2015.
Nota: Baixe e use a versão Community 2015 do VS. Ela é grátis e é equivalente a versão Professional.
Criando a solução e o projeto Windows Forms
Abra o VS Community 2015 e clique em New Project. Vamos criar uma solução e dois projetos: um projeto Windows Forms e um projeto ASP .NET Web Forms (que estará na segunda parte do artigo).
Selecione Other Project Types e clique em Visual Studio Solution. Depois, selecione Blank Solution e informe o nome Gerando_GraficosTabelas e clique em OK.
E seguida, clique no menu File -> Add Project e selecione a Visual Basic -> Windows Forms Application. Após isso, informe o nome Projeto_WF e clique no botão OK.
No formulário padrão form1.vb, inclua os seguintes controles:
- 1 PictureBox – picImagem
- 1 Button – btnGerarImagem
- 4 Labels
- 4 TextBox – txtLargura, txtAltura, txtLocalNomeImagem e txtTexto
- 3 Buttons – btnCorFundo, btnCorTexto, btnFonte
Disponha os controles conforme o leiaute da figura abaixo:
A seguir, defina o seguinte namespace no projeto: Imports System.IO.
Dpois, declare as seguintes variáveis no formulário:
‘Define as variáveis para cor de fundo, do texto e a fonte
Dim CorFundo As Color = Color.Aqua
Dim CorTexto As Color = Color.Black
Dim Fonte As Font = New Font(“Arial”, 16, FontStyle.Bold, FontStyle.Italic)
No evento Click do botão de comando – Gerar Imagem -, inclua o código a seguir:
Private Sub btnGerarImagem_Click(sender As Object, e As EventArgs) Handles btnGerarImagem.Click GerarImagem() End Sub
O código do método GerarImagem() é visto a seguir:
Private Sub GerarImagem() Try 'Define a Altura(Height) e Largura(Width) da imagem Dim width As Integer = Convert.ToInt32(txtLargura.Text) Dim height As Integer = Convert.ToInt32(txtAltura.Text) 'Cria uma instância do objeto Bitmap de um tamanho especificado Dim objBitmap = New Bitmap(width, height) Dim objGraphics = Graphics.FromImage(objBitmap) 'Define a cor da borda objGraphics.FillRectangle(New SolidBrush(Color.Black), 0, 0, width, height) 'define a Cor de Fundo objGraphics.FillRectangle(New SolidBrush(CorFundo), 2, 2, width - 4, height - 4) 'Cria um objeto de StringFormat de define os alinhamentos Dim strFormat = New StringFormat() strFormat.Alignment = StringAlignment.Center strFormat.LineAlignment = StringAlignment.Center 'Desenha o texto na imagem objGraphics.DrawString(txtTexto.Text, Fonte, New SolidBrush(CorTexto), New Rectangle(0, 0, width, height), strFormat) If Not File.Exists(txtLocalNomeImagem.Text) Then 'Salva a imagem objBitmap.Save(txtLocalNomeImagem.Text) Else MessageBox.Show("A imagem já existe. Informe outro nome ou local.") Return End If 'exibe a imagem no controle picturebox picImagem.Image = Image.FromFile(txtLocalNomeImagem.Text) 'Não esqueça de liberar os recursos objGraphics.Dispose() objBitmap.Dispose() Catch ex As Exception MessageBox.Show("Erro : " + ex.Message) End Try End Sub
O código já esta comentado, mas basicamente cria uma imagem usando os dados fornecidos pelo usuário.
A seguir, defina o código que trata da definição da cor do fundo, da cor do texto e da fonte usada no projeto:
Private Sub btnCorFundo_Click(sender As Object, e As EventArgs) Handles btnCorFundo.Click Dim dlgCorFundo As New ColorDialog If dlgCorFundo.ShowDialog = Windows.Forms.DialogResult.OK Then btnCorFundo.BackColor = dlgCorFundo.Color CorFundo = dlgCorFundo.Color End If End Sub Private Sub btnCorTexto_Click(sender As Object, e As EventArgs) Handles btnCorTexto.Click Dim dlgCorTexto As New ColorDialog If dlgCorTexto.ShowDialog = Windows.Forms.DialogResult.OK Then btnCorTexto.BackColor = dlgCorTexto.Color CorTexto = dlgCorTexto.Color End If End Sub Private Sub btnFonte_Click(sender As Object, e As EventArgs) Handles btnFonte.Click Dim dlgFonte As New FontDialog If dlgFonte.ShowDialog <> Windows.Forms.DialogResult.Cancel Then btnFonte.Font = dlgFonte.Font Fonte = dlgFonte.Font End If End Sub
No código acima, estamos usando as caixas de diálogo ColorDialog para permitir ao usuário selecionar uma cor e uma caixa de diálogo FontDialog, para escolher a fonte.
Executando o projeto iremos obter:
Na próxima parte do artigo veremos como fazer a mesma coisa em uma aplicação ASP .NET Web Forms.
Pegue o projeto completo aqui: Gerando_GraficosTabelas.zip