.NET

2 dez, 2016

Criando imagens via código (Windows Forms) – Parte 01

Publicidade

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:

vbn_graph11

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:

vbn_graph12

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