Desenvolvimento - ASP. NET

Salvando os Mapas do Google com VFP 9 e a Classe GdiPlus

Veja neste artigo como podemos salvar os mapas do Google Maps como imagens do tipo JPEG utilizando a classe GDIPLUS, versão 1.20.

por Cyro Bergonzi



Uma ótima ferramenta para se trabalhar com imagens no Visual Fox é a classe GdiPlus. Nesse artigo vamos utilizá-la para recortar e salvar os mapas já alterados pelo usuário no artigo Acessando Mapas do Google com VFP.

A clase GdiPlus está disponivel para download no link http://vfpx.codeplex.com/wikipage?title=GDIPlusX. Depois de realizar o download, coloque a pasta da classe dentro da pasta da sua aplicação para adicionar a mesma ao seu projeto.

Veremos que toda a programação será feita em Fox, mesmo porque o mapa já foi solicitado e alterado conforme a vontade do usuário.

No formulário para este artigo vamos acrescentar um controle Image e colocar o mesmo sobre o Componente OLE WebBrowserControl, definindo as propriedade Width e Heigth iguais as do Componente OLE e com a propriedade Visible = .F.. Acrescente também mais dois componentes do tipo CommandButton, um ao lado do CommandButton (que dispara a pesquisa do mapa) e o outro no canto inferior direito.

Na janela de comandos do Visual FoxPro digite o comando da Listagem 1.

Listagem 1. Formulário derivado da classe VFP.

CREATE FORM Mapas AS Form DEFAULT

Com este comando garantimos que o novo formulário irá derivar da classe básica de formulários do Visual FoxPro. Veja o resultado na Figura 1.

Formulário Mapas vazio, sem controles
Figura 1. Formulário Mapas vazio, sem controles

Agora vamos adicionar os controles Label, Textbox, CommandButton e Image ao formulário. Para isso, nomeie os controles da mesma forma que apresentada na Listagem 2.

Listagem 2. Nome dos controles

  TextBox.Name: enderecoText
 CommandButton.Name: cmdPesquisar
  CommandButton.Name: cmdSaveImg
  Label1.Caption = Endereço
  cmdPesquisar.Caption = ...
  cmdSaveImg.Caption = Salvar
  cmdSair.Caption = Sair
  Image1

Agora formate o layout do formulário conforme a Figura 2.

Nova formatação do formulário

Figura 2. Nova formatação do formulário

Até o momento nosso formulário já tomou a forma básica, mas ainda falta o componente OLE com o controle WebBrowser que irá exibir o mapa. Para incluí-lo, na guia tools do VFP 9 acesse o item Component Gallery e selecione o controle WebBrowser Control, conforme mostra a Figura 3.

>WebBrowser Control

Figura 3. WebBrowser Control

Araste o controle para o formulário, para que o mesmo fique com a aparência da Figura 4.

WebBrowser Control no formulário

Figura 4. WebBrowser Control no formulário

Agora dê um duplo clique no cmdSaveImg e acrescente o código presente na Listagem 3.

Listagem 3. Configuração do comando cmdSaveImg

  lpJpegFileSave = Sys(5)+Sys(2003)+'\mapa.jpg'
  ThisForm.Image1.Picture = ''
   
  do locfile("system.app") 
   
  Local loJpg As xfcBitmap
  Local loCropped As xfcBitmap
  Local loRect As xfcRectangle
   
   
  With _Screen.System.Drawing
              loJpg = .Bitmap.FromScreen(Thisform.HWnd)
              loJpg.Save(lpJpegFileSave, .Imaging.ImageFormat.JPEG)
  Endwith
        
  With _Screen.System.Drawing
   
              Local loRect As xfcRectangle
  loRect = .Rectangle.New(15, 65, ThisForm._webgoogle.Width,    ThisForm._webgoogle.Height)
              loCropped = loJpg.CLONE(loRect)
              loCropped.Save(lpJpegFileSave, .Imaging.ImageFormat.JPEG)
   
  Endwith
   
  ThisForm._webgoogle.Visible = .F.
  *!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
  ThisForm.Image1.Visible = .T.
  ThisForm.Image1.Picture = lpJpegFileSave 
  ThisForm.Refresh

No código acima temos alguns trechos que precisam ser comentados, para trazer maior clareza do que está acontecendo. Observe no trecho abaixo:

  lpJpegFileSave = Sys(5)+Sys(2003)+'\mapa.jpg'
  ThisForm.Image1.Picture = ''

No trecho acima definimos o valor da variável lpJpegFileSave com o caminho e nome do arquivo que irá armazenar a imagem salva do mapa e definimos que o valor da prorpiedade Picture do controle Image é vazia.

No trecho abaixo podemos executar o arquivo responsável pela manipulação de imagens.

do locfile("system.app") 

Assim, realizamos a verificação de existência do arquivo system.app e executamos o mesmo, pois este será o responsável por nos ajudar a manipular a imagem do mapa.

OBS: Esse trecho pertence a classe GdPlus.

Agora observe o código a seguir:

  Local loJpg As xfcBitmap
  Local loCropped As xfcBitmap
  Local loRect As xfcRectangle 

Acima estamos definindo as variáveis que serão responsáveis por manipular a imagem, sendo as mesmas derivadas da classe GdiPlus. São elas:

  • loJpg, que receberá o nome do arquivo e irá salvar a imagem no disco;
  • loCropped, que vai armazenar a cópia da imagem do mapa, porém, já com o novo tamanho, ou seja, cortada;
  • loRect, que armazena o novo tamanho da imagem do mapa definido via código.

Para salvar o print do formulário vamos utilizar o código a seguir:

  With _Screen.System.Drawing
              loJpg = .Bitmap.FromScreen(Thisform.HWnd)
              loJpg.Save(lpJpegFileSave, .Imaging.ImageFormat.JPEG)
  Endwith 

No trecho acima passamos o formulário como parâmetro para a variável loBmp e, em seguida, salvamos a imagem do mesmo. Notem que iremos trabalhar a partir do print do formulário.

Para redimensionar a imagem e salvá-la, utilize o código a seguir:

  With _Screen.System.Drawing
   
              Local loRect As xfcRectangle
  loRect = .Rectangle.New(15, 65, ThisForm._webgoogle.Width,    ThisForm._webgoogle.Height)
              loCropped = loJpg.CLONE(loRect)
              loCropped.Save(lpJpegFileSave, .Imaging.ImageFormat.JPEG)
   
  Endwith 

No trecho acima definimos o novo tamanho da imagem na variavel loRect. Logo abaixo estamos clonando a imagem já salva do print do formulário no novo tamanho e, em seguida, salvamos a mesma no formato JPEG.

Para exibir a imagem salva utilizamos o código a seguir:

  ThisForm._webgoogle.Visible = .F.
  *!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!
  ThisForm.Image1.Visible = .T.
  ThisForm.Image1.Picture = lpJpegFileSave 
  ThisForm.Refresh

No trecho acima alteramos a propriedade visible do componente OLE WebBrowserControl para .F., e alteramos também a propriedade Visible do controle Image1 para .T. e igualamos a propriedade Picture com o caminho do arquivo salvo. Dessa forma, a imagem do mapa será exibida no formulário.

Depois disso, é só dar um duplo clique no cmdSair e acrescente o código abaixo.

ThisForm.Release

Assim, esse trecho fecha o nosso formulário.

Na Figura 5 notamos o resultado final.

Figura do mapa

Figura 5. Figura do mapa

Espero que tenham gostado deste pequeno tutorial, onde foram abordados apenas conceitos básicos na operação com imagens no Visual Fox com a classe GDIPLUS.

Cyro Bergonzi

Cyro Bergonzi - Bacharel em Sistemas de Informação, Analista de Sistemas na CWS Systems. Trabalha como Analista Programador Visual Fox / C# .Net na empresa BDK Solutions. Tem 31 anos e possui diversos cursos na área de programação bem como Java e ASP .Net.