VB .NET - Mesclando e imprimindo imagens


Esta dica é baseada em um artigo encontrado no http://vbcity.com/ e mostrar como mesclar e imprimir imagens em uma aplicação Windows Forms.

Vou usar o Visual Basic 2010 Express Edition para criar o exemplo mostrado nesta dica.

Abra o VB 2010 Express e crie um novo projeto do tipo Windows Forms Application chamado MesclandoImagens;

A seguir defina no formulário padrão form1.vb os seguintes controles:

Conforme o leiaute abaixo:

Primeiro vamos definir o código dos botões Carregar Imagem que permitirá que seja selecionada uma imagem que será exibida no controle PictureBox.

O código dos botões é quase idêntico somente mudando o controle pictureBox que carrega a imagem selecionada;

Para selecionar uma imagem usamos o controle OpenFileDialog permite que o usuário selecione um arquivo para ser aberto pela sua aplicação;

O código dos dois botões pode ser visto a seguir:

Private Sub btnCarregarImagem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCarregarImagem1.Click


  'carrega a imagem 1

  Dim fdlg As OpenFileDialog = New OpenFileDialog()

  fdlg.Title = "C"

  fdlg.InitialDirectory = "c:\"

  fdlg.Filter = "Imagens (*.*)|*.*|Imagens (*.*)|*.*"

  fdlg.FilterIndex = 2

  fdlg.RestoreDirectory = True
 

 If fdlg.ShowDialog() = DialogResult.OK Then

       picImagem1.Image = New System.Drawing.Bitmap(fdlg.FileName)

  End If

End Sub

Código para carregar a imagem no primeiro PictureBox - picImagem1

Private Sub btnCarregarImagem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCarregarImagem2.Click


  'carrega a imagem 2

 Dim fdlg As OpenFileDialog = New OpenFileDialog()

  fdlg.Title = "C"

  fdlg.InitialDirectory = "c:\"

  fdlg.Filter = "Imagens (*.*)|*.*|Imagens (*.*)|*.*"

  fdlg.FilterIndex = 2

  fdlg.RestoreDirectory = True
 

  If fdlg.ShowDialog() = DialogResult.OK Then

      picImagem2.Image = New System.Drawing.Bitmap(fdlg.FileName)

   End If

End Sub

Código para carregar a imagem no segundo PictureBox - picImagem2

O código do botão - Mesclar (btnMesclar) é dado a seguir:

Private Sub btnMesclar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMesclar.Click

    picImagem3.Image = mesclarImagens(picImagem1.Image, picImagem2.Image)

End Sub

A rotina mesclarImagem é quem vai realizar a mesclagem das duas imagens e retornar a imagem mesclada. O seu código é dado abaixo:

 Public Function mesclarImagens(ByVal Pic1 As Image, ByVal pic2 As Image) As Image

        Dim ImagemMesclada As Image ' Esta sera a imagem mesclada retornada
        Dim Wide, High As Integer ' tamanho da imagem mesclada
        Try
            ' Calculando a largura(Width) e altura(Height) necessária para compor as imagens
            ' Largura
            Wide = Pic1.Width + pic2.Width

            ' Altura: Verificar se a nova imagem tem altura suficiente para conter as duas imagens
            High = If(Pic1.Height >= pic2.Height, Pic1.Height, pic2.Height)

            ' Cria um bitmap vazio
            Dim bm As New Bitmap(Wide, High)

            ' Obtem o objeto Graphics para este bitmap
            Dim gr As Graphics = Graphics.FromImage(bm)

            ' Desenha a primeira imagem a esquerda da nova imagen
            gr.DrawImage(Pic1, 0, 0)

            ' Desenha a segunda imagem a direita
            gr.DrawImage(pic2, Pic1.Width, 0)
            ' Atribui a imagem mesclada que acabamos de criar ao controle picturebox
            ImagemMesclada = bm
            ' libera o objeto usado
            gr.Dispose()
            ' retorna a imagem mesclada
            Return ImagemMesclada
        Catch ex As Exception
            MsgBox("Erro ao mesclar imagem: " & ex.Message)
        End Try
    End Function

Para imprimir a imagem inserimos o código abaixo no evento Click do botão Imprimir:

Private Sub btnImprimir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnImprimir.Click


   ' redimensiona a figura 3 para ajustar o tamanho

   picImagem3.Width = picImagem3.Image.Width + 2

   picImagem3.Height = picImagem3.Image.Height + 2

   ' imprime a imagem

    PrintDocument1.Print()
 

End Sub

Precisamos definir o evento PrintPage do controle PrintDocument conforme abaixo:

Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

        Dim Rect As New Rectangle(20, 20, picImagem3.Width, picImagem3.Height)
        e.Graphics.DrawImage(picImagem3.Image, Rect)
End Sub

Executando o projeto e carregando as imagens e clicando  no botão Mesclar iremos obter:

Para imprimir basta clicar no botão imprimir.

Simples, simples assim...

Pegue o projeto completo aqui:   MesclandoImagens.zip

Eu sei é apenas VB .NET, mas eu gosto...

Referências:

José Carlos Macoratti