Digitalizando Imagens com o Visual Basic


Tenho encontrado muitas perguntas relacionadas ao tratamento de imagens e o Visual Basic. Uma das mais frequentes refere-se a digitalização de imagens no VB . É possível ? Como fazer ? etc..

Resolvi então neste artigo abordar o tema - digitalizando imagens com o VB.

A primeira coisa que deve ficar bem clara é que não é o Visual Basic nem a aplicação Visual Basic que vai fazer a digitalização da imagem. A aplicação VB irá abrir o digitalizador do scanner que estiver instalado no seu computador para fazer este serviço. A aplicação em si irá ajudar a tornar as tarefas relacionadas com o processo mais fáceis de serem executadas.

Para obter ter a funcionalidade de tratar imagens digitalizadas vamos ter que usar componentes prontos que irão realizar as tarefas pertinentes. Existe no Visual Basic os componentes para controle de digitalização de imagens Kodak que você deverá incluir no seu projeto. Os componentes existentes são :

Para incluir estes componentes no seu projeto faça o seguinte :
  • Selecione o menu Project opção Components
  • Na janela Components procure os componentes e marque a caixa de seleção conforme a figura ao lado

Na verdade não iremos usar o componente : Controle de miniaturas de imagens Kodak

Após a inclusão os componentes irão aparecer na barra de ferramentas conforme figura abaixo:

Vamos inciar o Visual Basic e criar um projeto do tipo StandardEXE ; no formulário principal inclua os componentes conforme acima e ainda os seguintes controles:

Componentes usados na aplicação para digitalizar imagens:
ImgAdmin - ImgAdmin1
ImgScan - ImgScan1
ImgEditl - ImgEdit1

A próxima etapa será definir as propriedades dos componentes : ImgScan , ImgEdit e ImgAdmin para que possamos por aplicação para funcionar.

A janela de propriedades customizadas para os controles ImgScan e ImgEdit estão exibidas abaixo:

ImgScan ImgEdit

A seguir algumas das propriedades definidas para ImgScan :

    Nome da Propriedade                                       Descrição da propriedade
DestImageControl Define o controle para o qual a imagem digitalizada será enviada. (Geralmente um controle ImgEdit)
FileType Define o tipo de imagem que deverá ser criada. Temos : TIFF , AWO e BMP
ScanTo Define o destino da imagem digitializada (geralmente um controle ImgEdit vinculado)
ShowSetupBeforeScan Define se o controle de digitalização do scanner deve ser usado ou não. True abre o controle do scanner e False a digitalização é feita de imediato
StopScanBox Define se a caixa de diálogo deve ser aberta permitindo cancelar o processo.
Zoom Determina a escala de visualização da imagem.

O controle ImgEdit trabalha de certa forma vinculado ao controle anterior, e , as propriedades definidas são:

    Nome da Propriedade                                       Descrição da propriedade
Image Retorna o tipo de imagem que esta carregada.(So pode salvar nos formatos:TIFF , AWO e BMP)
FileType Retorna/Define o nome e o caminho do arquivo que esta no controle.
ImageDisplayed Informa se o controle possui uma imagem carregada.
ImageModified Informa se a imagem do controle foi modificada
Page Informa qual página do arquivo de imagem esta sendo acessada
PageCount Informa quantas páginas o arquivo de imagens possui.
ScrollBars Determina a escala de visualização da imagem.

O controle ImgAdmin tem as seguintes propriedades definidas :

    Nome da Propriedade                                       Descrição da propriedade
CancelError Retorna/Define um erro , se o usuário pressionar Cancelar na janela de diálogo
DefaultEx Retorna ou define a extensão padrão dos arquivos que será exibida.
DialogTitle Define o título da janela de diálogo
FileType Retorna o tipo de formato do arquivo da imagem
Image Define o nome e caminho da imagem selecionada
InitDir Retorna/Define a pasta padrão para salvar/abrir os arquivos

Agora vamos começar a codificar as funcionalidades da aplicação.

Antes vamos definir um menu simples usando o Editor de Menus(CTRL+E). Configure as opções do Menu conforme abaixo:

1- Na seção General Declarations do formulário vamos definir a variável que irá receber o nome do arquivo:

Option Explicit
Dim strNomeArquivo As String

2- No evento Click do botão - Obter Imagem - digite o código a seguir:

Private Sub cmdObterImagem_Click()

On Error GoTo trata_scan_erro

ImgScan1.StartScan

Exit Sub

trata_erro_scan:

If Err.Number = 1116 Then
     MsgBox " Controle do Scanner não localizado . ", vbInformation, "Digitaliza Imagens"
ElseIf Err.Number = 1101 Then
     MsgBox " Falha no Scanner ", vbInformation, "Digitaliza Imagens"
ElseIf Err.nubmer = 1117 Then
      MsgBox " Sem fonte de dados TWAIN ", vbInformation, "Digitaliza Imagens"
End If

End Sub

Se você ficou abismado pela simplicidade do código , é isto mesmo , não houve erros. No código acima eu apenas inicializei o processo de digitalização da imagem(ImgScan1.StartScan) usando controle de digitalização do scanner (ele será aberto e em seguida a imagem será digitalizada)

O código para tratamento de erro verifica se há scanner e seu software instalados e falhas no dispositivo.

Agora o código do botão - Abrir Imagem :

Private Sub cmdAbriImagem_Click()

On Error GoTo trata_abrir_erro

ImgAdmin1.DialogTitle = "Abrindo arquivo de imagem..."
ImgAdmin1.ShowFileDialog OpenDlg

strNomeArquivo = ImgAdmin1.Image

ImgEdit1.Image = strNomeArquivo
ImgEdit1.Display

Exit Sub

trata_abrir_erro:
MsgBox " Ocorreu um erro durante abertura da imagem. ", vbCritical, "Abrir Imagem"

End Sub

O código acima também não tem segredos. Funciona assim:

  • estou definindo o título da janela de dialogo
  • em seguida estou abrindo a janela de diálogo
  • Atribuo o nome do arquivo selecionado a variável strNomeArquivo
  • Atribuo o arquivo ao controle ImgEdit1
  • Exibo a imagem

Ao lado a janela de diálogo que será aberta.

Vamos agora para o código relacionado ao evento Click do botão - Salvar Imagem :

Private Sub cmdSalvarImagem_Click()

On Error GoTo trata_erro_Salvar

ImgAdmin1.DialogTitle = "Salvar Imagem como : "
ImgAdmin1.ShowFileDialog SaveDlg
strNomeArquivo = ImgAdmin1.imge
ImgEdit1.SaveAs strNomeArquivo

trata_erro_Salvar

If Err.Number = 1178 Then
     MsgBox " Formato de arquivo não suportado ", vbCritical, "Salva Imagem"
End If

End Sub

Pronto ! Você acabou de implementar um projeto com tratamento de imagens para scanner no VB.

Existem muitas coisas que você pode melhorar incrementando ainda mais o projeto mas o básico já esta pronto. Uma detalhe que poderia causar frustração é que os formatos suportados para salvar as imagens são apenas três : TIFF , BMP e AWD.

Eu sei , é apenas Visual Basic , mas eu gosto !


José Carlos Macoratti