VB .NET - Exibindo imagens de uma pasta em miniaturas e com Zoom.


 Hoje vou mostrar como acessar um diretório e exibir todos os seus arquivos do tipo imagem como miniaturas e também com Zoom para uma imagem selecionada.

Exibir figuras em um controle Image é simples, e,  o VB.NET oferece alguns recursos interessantes.

O controle Image possui diversos métodos e propriedades que podemos usar para tratar imagens.

O método GetThumbnailImage() retorna uma miniatura para a imagem.

Se Image contiver uma imagem em miniatura, esse método recupera a miniatura e o seu tamanho para o tamanho solicitado. Se o controle Image não contiver uma imagem em miniatura,  este método cria uma imagem em miniatura para dimensionar a imagem principal.

O método de GetThumbnailImage funciona bem quando a imagem em miniatura solicitada tem um tamanho de até 120x120 pixels. Se você usar o método para imagens maiores  (por exemplo, 300 x 300) poderá haver uma perda de qualidade visível na imagem em miniatura. Pode ser melhor dimensionar a imagem principal (em vez de dimensionar a miniatura) chamando o método de DrawImage que desenha a imagem do controle Image no local especificado e com o tamanho original.

Recursos usados:

Criando um visualizador de imagens com Zoom

Abra o Visual Studio 2013 Express Edition for windows desktop e clique em New Project;

Selecione a linguagem Visual Basic e o template Windows Forms Application;

Informe o nome VBNET_Imagens ou outro nome de sua preferência e clique OK.

A seguir inclua a partir da ToolBox os seguintes controles no formulário form1.vb:

Disponha os controles no formulário conforme a figura abaixo:

No menu PROJECT clique em Add Windows Forms e aceite o nome padrão Form2.vb e clique em OK.

A seguir inclua a partir da ToolBox os seguintes controles no formulário form2.vb:

Disponha os controles no formulário conforme a figura abaixo:

No evento SelectedIndexChanged do controle Combobox - cboCaminho - defina o código abaixo:

 Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cboCaminho.SelectedIndexChanged
        ExibirImagensNaPasta()
    End Sub

A rotina ExibirImagensNaPasta() possui o seguinte código:

    Sub ExibirImagensNaPasta()
        Dim arquivo As String
        Dim FI As FileInfo
        Dim PBox As PictureBox, img As Image
        Dim Left As Integer = 10
        Dim Top As Integer = 10
        Dim larguraImagem As Integer = 64
        Me.Invalidate()
        Try
            For Each arquivo In Directory.GetFiles(cboCaminho.Text)
                FI = New FileInfo(arquivo)
                If FI.Extension = ".GIF" Or  FI.Extension = ".JPG" Or  FI.Extension = ".jpg" Or _
                    FI.Extension = ".gif" Or FI.Extension = "tiff" Or FI.Extension = "TIFF" Then
                    PBox = New PictureBox()
                    PBox.SizeMode = PictureBoxSizeMode.Zoom
                    img = Image.FromFile(FI.FullName)
                    PBox.Image = img.GetThumbnailImage(larguraImagem, larguraImagem, Nothing, Nothing)
                    If Left + larguraImagem > Me.pnlImagensMiniaturas.Width Then
                        Left = 10
                        Top += larguraImagem + 10
                    End If
                    PBox.Left = Left
                    PBox.Top = Top
                    PBox.Width = larguraImagem
                    PBox.Height = larguraImagem
                    PBox.Visible = True
                    PBox.Tag = FI.FullName
                    Me.Controls.Item("pnlImagensMiniaturas").Controls.Add(PBox)
                    AddHandler PBox.Click, New System.EventHandler(AddressOf AbrirImagem)
                    Left = Left + 74
                    Application.DoEvents()
                End If
                lbNomeArquivos.Items.Add(FI.Name)
            Next
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

Os controles PictureBox com as miniaturas não são adicionados diretamente no formulário; em vez disso, eles são adicionados a um controle Panel com sua propriedade AutoScroll definida como True, de modo que os usuários podem rolar as imagens de forma independente dos outros controles no formulário.

O código passa por cada arquivo na pasta selecionada e examina a sua extensão. Se for JPG, GIF ou TIFF (você pode adicionar mais extensões de arquivo se você quiser), ele cria um novo controle PictureBox, define seu tamanho e localização, carrega a miniatura da imagem, e em seguida, adiciona na coleção Controls do controle Painel.

O Caminho de cada imagem é armazenada na propriedade Tag do controle PictureBox, e é recuperado posteriormente para carregar a imagem no segundo formulário - Form2.vb, onde pode ser visualizado.

Observe que o código adiciona um manipulador para o evento Click de cada controle PictureBox.

Todos os controles PictureBox compartilham um manipulador comum para o seu evento Click, a sub-rotina AbrirImagem(). Esta sub-rotina lê o caminho da imagem selecionada a partir da propriedade Tag do controle que disparou o evento Click e exibe a imagem correspondente no formulário Form2.

O código da rotina AbrirImagem() é exibida a seguir:

 Sub AbrirImagem(ByVal sender As Object, ByVal e As System.EventArgs)
        Try
            Dim imgForm As New Form2()
            imgForm.picImagemZOOM.Image = Image.FromFile(sender.tag)
            imgForm.Show()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

No evento Click do controle Image no formulário Form2, temos o código que fecha o formulário :

 Private Sub picImagemZOOM_Click(sender As Object, e As EventArgs) Handles picImagemZOOM.Click
        Me.Close()
 End Sub

A opção Limpar do menu a limpa todos os controles do formulário e possui o código abaixo:

Private Sub LimparToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles LimparToolStripMenuItem.Click
        Dim ctrl As Integer
        pnlImagensMiniaturas.Controls.Clear()
        For ctrl = Me.pnlImagensMiniaturas.Controls.Count - 1 To 0 Step -1
            Me.pnlImagensMiniaturas.Controls.Remove(Me.Controls(ctrl))
        Next
        lbNomeArquivos.Items.Clear()
        cboCaminho.Text = ""
    End Sub

Executando o projeto e selecionando uma pasta no controle combobox teremos a exibição dos nomes dos arquivos e das imagens:

Clicando em uma imagem teremos a sua visualização no segundo formulário:


Pegue o projeto completo aqui : 
VBNET_Imagens.zip

João 4:23 Mas a hora vem, e agora é, em que os verdadeiros adoradores adorarão o Pai em espírito e em verdade; porque o Pai procura a tais que assim o adorem.

João 4:24 Deus é Espírito, e é necessário que os que o adoram o adorem em espírito e em verdade.

Até o próximo artigo...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti