VB  .NET - Alterando a resolução e as dimensões de imagens


 

 Neste artigo vou mostrar como alterar a resolução e as dimensões de imagens usando a linguagem VB .NET.


Quando tratamos com resolução de imagens em geral estamos falando de pontos por polegada ou DPI onde
Pontos por polegada (DPI ou dpi) [1] é uma medida de impressão espacial ou densidade de pontos de vídeo, em particular o número de pontos individuais que podem ser colocados em uma linha no espaço de 2,5 cm (1 polegada).

 

Como os monitores não têm pontos, mas têm pixels; O conceito estreitamente relacionado para monitores e imagens é pixels por polegada ou PPI. Em geral os computadores trabalham com trabalham com imagens com uma resolução de 96 pixels por polegada.

 

Já a impressão de imagens trabalha com uma resolução maior , como algo em torno de 300 DPI.

 

Neste artigo vamos implementar a alteração da resolução e do tamanho de imagens na linguagem VB .NET.

 

Recursos Usados :

Criando o projeto Windows Forms

Abra o VS 2017 Community e crie um novo projeto (File-> New Project) usando a linguagem Visual Basic e o template Windows Classic Desktop ->Windows Forms Application(.NET Framework)

Informe um nome a seu gosto. Eu vou usar o nome vbn_alteraResolucaoImagem

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

  1. MenuStrip - mnu1

  2. OpenFileDialog - ofd1

  3. SaveFileDialog - svd1

  4. 1 Picturebox - picImagem , SizeMode = Zoom e BorderStyel = FixedSingle

  5. 4 TextBox - txtDpiX, txtDpiY, txtLargura e txtAltura

  6. Defina no MenuStrip um menu com as opções :  Abrir, Salvar (Enabled=false) e Sair

Disponha os controles conforme mostra a imagem da figura abaixo:

Implementando o código no formulário

Vamos agora definir o código no formulário Form1.vb começando com a declaração dos namespaces:

Imports System.Drawing.Imaging
Imports System.IO
Imports System.Media

No início do formulário declare a variável :

Dim OriginalBitmap As Bitmap = Nothing

No evento Click da opção do menu Abrir inclua o código abaixo:

Private Sub AbrirToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles AbrirToolStripMenuItem.Click
        If ofd1.ShowDialog() = DialogResult.OK Then
            OriginalBitmap = New Bitmap(ofd1.nomeArquivo)
            picImagem.Image = OriginalBitmap
            Using gr As Graphics = Graphics.FromImage(OriginalBitmap)
                txtDpiX.Text = gr.DpiX.ToString()
                txtDpiY.Text = gr.DpiY.ToString()
            End Using
            txtLargura.Text = OriginalBitmap.Width.ToString()
            txtAltura.Text = OriginalBitmap.Height.ToString()
            SalvarToolStripMenuItem.Enabled = True
        End If
    End Sub

Neste código abrimos um arquivo de imagem e criamos  um objeto Graphics associado ao bitmap usando suas propriedades DpiX e DpiY para exibir a resolução da imagem original. Exibimos também a largura e altura do bitmap.

No evento Click da opção Salvar defina o código a seguir:

Private Sub SalvarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SalvarToolStripMenuItem.Click
        If svd1.ShowDialog() = DialogResult.OK Then
            Dim larguraAnterior As Integer = OriginalBitmap.Width
            Dim alturaAnterior As Integer = OriginalBitmap.Height
            Dim novaLargura As Integer = Integer.Parse(txtLargura.Text)
            Dim novaAltura As Integer = Integer.Parse(txtAltura.Text)
            Using bm As New Bitmap(novaLargura, novaAltura)
                Dim points As Point() = {New Point(0, 0), New Point(novaLargura, 0), New Point(0, novaAltura)}
                Using gr As Graphics = Graphics.FromImage(bm)
                    gr.DrawImage(OriginalBitmap, points)
                End Using
                Dim dpix As Single = Single.Parse(txtDpiX.Text)
                Dim dpiy As Single = Single.Parse(txtDpiY.Text)
                bm.SetResolution(dpix, dpiy)
                SalvarImagem(bm, svd1.FileName)
                SystemSounds.Beep.Play()
            End Using
        End If
    End Sub

Neste código exibimos uma caixa de diálogo Salvar arquivo. Se você selecionar um arquivo e clicar em Salvar, o código lê os novos valores nas caixas de texto. Em seguida, cria um bitmap que tem as novas dimensões. Ele cria um objeto Graphics associado e usa seu método SetResolution para definir a resolução do novo bitmap.

Finalmente, o método salva o novo bitmap chamando o método SalvarImagem().

O método SetResolution é usado para definir a resolução desejada em um bitmap recém-criado. Alterar a resolução da imagem não altera seu tamanho físico.

Agora crie o método SalvarImagem usando o seguinte código :

Public Sub SalvarImagem(imagem As Image, nomeArquivo As String)
        Dim extensao As String = Path.GetExtension(nomeArquivo)
        Select Case extensao.ToLower()
            Case ".bmp"
                imagem.Save(nomeArquivo, ImageFormat.Bmp)
                Exit Select
            Case ".exif"
                imagem.Save(nomeArquivo, ImageFormat.Exif)
                Exit Select
            Case ".gif"
                imagem.Save(nomeArquivo, ImageFormat.Gif)
                Exit Select
            Case ".jpg", ".jpeg"
                imagem.Save(nomeArquivo, ImageFormat.Jpeg)
                Exit Select
            Case ".png"
                imagem.Save(nomeArquivo, ImageFormat.Png)
                Exit Select
            Case ".tif", ".tiff"
                imagem.Save(nomeArquivo, ImageFormat.Tiff)
                Exit Select
            Case Else
                Throw New NotSupportedException(Convert.ToString("Extensão de arquivo desconhecida...") & extensao)
        End Select
    End Sub

Neste código usamos o método Image.Save() para salvar a imagem para um arquivo especificado no formato definido.

Finalmente no evento Click da opção de menu Sair digite o código a seguir:

Private Sub SairToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles SairToolStripMenuItem.Click
        If (MessageBox.Show("Deseja encerrar o programa ?", "Encerrar", MessageBoxButtons.YesNo) = DialogResult.Yes) Then
            Application.Exit()
        End If
End Sub

Executando o projeto iremos obter o resultado abaixo:

Na primeira figura temos a imagem e a resolução e a largura e altura originais. A seguir alteremos a resolução e a largura e altura. Depois abrindo a imagem alterada vemos o resultado.

Pegue o código do projeto aqui : vbn_alteraResolucaoImagem.zip

(Disse Jesus) Na verdade, na verdade vos digo que aquele que crê em mim tem a vida eterna. João 6:47

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