Gráficos GDI + no Tutorial do Visual Basic .NET

GDI + é a maneira de desenhar formas, fontes, imagens ou geralmente qualquer coisa gráfica Visual básico .INTERNET.

Este artigo é a primeira parte de uma introdução completa ao uso do GDI + no Visual Basic .NET.

GDI + é uma parte incomum do .NET. Ele estava aqui antes do .NET (GDI + foi lançado com o Windows XP) e não compartilha os mesmos ciclos de atualização que o .NET Framework. A documentação da Microsoft geralmente afirma que o Microsoft Windows GDI + é uma API para C / C ++ programadores no sistema operacional Windows. Mas GDI + Além disso inclui o namespaces usados ​​no VB.NET para programação gráfica baseada em software.

WPF

Mas não é o software gráfico fornecido pela Microsoft, especialmente desde o Framework 3.0. Quando o Vista e o 3.0 foram introduzidos, o WPF totalmente novo foi introduzido com ele. O WPF é uma abordagem acelerada por hardware de alto nível aos gráficos. Como coloca Tim Cahill, membro da equipe de software da Microsoft WPF, com o WPF "você descreve sua cena usando construções de alto nível, e nos preocuparemos com o ". E o fato de ser acelerado por hardware significa que você não precisa arrastar a operação do processador do PC para desenhar formas no tela. Muito do trabalho real é feito pela sua placa gráfica.

instagram viewer

Já estivemos aqui antes. Todo "grande salto adiante" geralmente é acompanhado por alguns tropeços para trás e, além disso, levará anos para o WPF percorrer os zilhões de bytes do código GDI +. Isso é especialmente verdade, já que o WPF pressupõe que você esteja trabalhando com um sistema de alta potência com muita memória e uma placa gráfica quente. É por isso que muitos PCs não conseguiam rodar o Vista (ou pelo menos usar os gráficos "Aero" do Vista) quando foram introduzidos. Portanto, esta série continua disponível no site para todo e qualquer usuário que ainda precise usá-la.

Good Ol 'Code

GDI + não é algo que você pode arrastar para um formulário como outros componentes no VB.NET. Em vez disso, os objetos GDI + geralmente precisam ser adicionados da maneira antiga - codificando-os do zero! (Embora o VB .NET inclua vários trechos de código muito úteis que podem realmente ajudá-lo.)

Para codificar GDI +, você usa objetos e seus membros de vários namespaces do .NET. (Atualmente, esses são apenas códigos de invólucro para objetos do sistema operacional Windows que realmente fazem o trabalho.)

Namespaces

Os espaços para nome no GDI + são:

Sistema. Desenhando

Isto é a namespace principal do GDI +. Ele define objetos para renderização básica (fontes, canetas, pincéis básicos etc.) e o objeto mais importante: Gráficos. Veremos mais disso em apenas alguns parágrafos.

Sistema. Desenhando. Desenho2D

Isso fornece objetos para gráficos vetoriais bidimensionais mais avançados. Alguns deles são pincéis de gradiente, tampas de caneta e transformações geométricas.

Sistema. Desenhando. Imaging

Se você quiser alterar imagens gráficas - ou seja, altere a paleta, extraia os metadados da imagem, manipule os metarquivos etc. - este é o que você precisa.

Sistema. Desenhando. Impressão

Para renderizar imagens na página impressa, interagir com a própria impressora e formatar a aparência geral de um trabalho de impressão, use os objetos aqui.

Sistema. Desenhando. Texto

Você pode usar coleções de fontes com esse espaço para nome.

Objeto de gráficos

O ponto de partida para o GDI + é o Gráficos objeto. Embora as coisas que você desenhar apareçam no monitor ou na impressora, o objeto Graphics é a "tela" na qual você desenha.

Mas o objeto Graphics também é uma das primeiras fontes de confusão ao usar o GDI +. O objeto Graphics está sempre associado a um determinado contexto do dispositivo. Portanto, o primeiro problema que praticamente todo aluno de GDI + enfrenta é: "Como obtenho um objeto Gráfico?"

Existem basicamente duas maneiras:

  1. Você pode usar o e parâmetro de evento que é passado para o OnPaint evento com o PaintEventArgs objeto. Vários eventos passam pelo PaintEventArgs e você pode usar o para se referir ao objeto Graphics que já está sendo usado pelo contexto do dispositivo.
  2. Você pode usar o CreateGraphics método para um contexto de dispositivo para criar um objeto Graphics.

Aqui está um exemplo do primeiro método:

Substituições protegidas Sub OnPaint (_. ByVal e As System. Janelas. Formulários. PaintEventArgs) Dim g As Graphics = e. Gráficos. g. DrawString ("Sobre o Visual Basic" & vbCrLf _. & "e GDI +" & vbCrLf & "Uma grande equipe", _. Nova fonte ("Times New Roman", 20), _. Escovas. Firebrick, 0, 0) MyBase. OnPaint (e) End Sub

Clique aqui para exibir a ilustração

Adicione isso à classe Form1 de um aplicativo padrão do Windows para codificá-lo.

Neste exemplo, um objeto Graphics já foi criado para o formulário Formulário 1. Tudo o que seu código precisa fazer é criar uma instância local desse objeto e usá-lo para desenhar no mesmo formulário. Observe que seu código Substituições a OnPaint método. É por isso MyBase. OnPaint (e) é executado no final. Você precisa ter certeza de que, se o objeto base (aquele que você está substituindo) estiver fazendo outra coisa, ele terá uma chance de fazê-lo. Geralmente, seu código funciona sem isso, mas é uma boa ideia.

PaintEventArgs

Você também pode obter um objeto Graphics usando o PaintEventArgs objeto entregue ao seu código no OnPaint e Métodos OnPaintBackground de um formulário. o PrintPageEventArgs passou em um Imprimir página O evento conterá um objeto Graphics para impressão. É até possível obter um objeto gráfico para algumas imagens. Isso permite que você pinte diretamente na imagem da mesma maneira que pintaria em um formulário ou componente.

Manipulador de Eventos

Outra variação do método 1 é adicionar um manipulador de eventos para o Pintura evento para o formulário. Aqui está a aparência desse código:

Sub-formulário particular1_Paint (_. Remetente ByVal como objeto, _. ByVal e As System. Janelas. Formulários. PaintEventArgs) _. Me trata. Pintura. Dim g As Graphics = e. Gráficos. g. DrawString ("Sobre o Visual Basic" & vbCrLf _. & "e GDI +" & vbCrLf & "Uma grande equipe", _. Nova fonte ("Times New Roman", 20), _. Escovas. Tijolo refratário, 0, 0) End Sub

CreateGraphics

O segundo método para obter um objeto Graphics para seu código usa um CreateGraphics método que está disponível com muitos componentes. O código fica assim:

Sub-botão privado1_Click (_. Remetente ByVal como sistema. Objeto, _. ByVal e As System. EventArgs) _. Botão de alças1. Dim g = Eu. CreateGraphics. g. DrawString ("Sobre o Visual Basic" & vbCrLf _. & "e GDI +" & vbCrLf & "Uma grande equipe", _. Nova fonte ("Times New Roman", 20), _. Escovas. Tijolo refratário, 0, 0) End Sub

Existem algumas diferenças aqui. Isso está no Button1.Click evento porque quando Formulário 1 se recompõe no Carga evento, nossos gráficos estão perdidos. Portanto, temos que adicioná-los em um evento posterior. Se você codificar isso, notará que os gráficos são perdidos quando Formulário 1 tem que ser redesenhado. (Mimimize e maximize novamente para ver isso.) Essa é uma grande vantagem em usar o primeiro método.

A maioria das referências recomenda o uso do primeiro método, pois seus gráficos serão repintados automaticamente. GDI + pode ser complicado!