Visão Geral do GDI+
GDI+ (Graphics Device Interface Plus) é uma evolução da interface gráfica GDI, fornecnedo recursos avançados para criação de aplicações gráficas em .NET. Este framework organiza-se em dois componentes fundamentais: objetos gráficos que definem ferramentas e variáveis de ambiente, e funções que utilizam esses recursos para renderizar elementos visuais.
Naemspaces e Classes Principais
Namespaces essenciais:
System.Drawing: Tipos básicos para desenho (fontes, pincéis, objetos Graphics)System.Drawing2D: Funcionalidades vetoriais e 2D avançadasSystem.Drawing.Imaging: Manpiulação de imagensSystem.Drawing.Text: Gerenciamento de coleções de fontesSystem.Drawing.Printing: Operações de impressão
Classes principais:
Graphics: Superfície de desenho principalPen: Define propriedades para traçadosBrush: Preenchimento de formas geométricasFont: Configurações tipográficasImage: Manipulação de imagens bitmap
Métodos Fundamentais da Classe Graphics
- Desenho de formas: DrawLine, DrawRectangle, DrawEllipse
- Preenchimento: FillRectangle, FillEllipse
- Elementos complexos: DrawString (texto), DrawImage (bitmaps)
- Controle: Clear (limpeza da tela), Save (estado gráfico)
Sistema de Coordenadas
GDI+ utiliza três sistemas de coordenadas:
- Global: Escopo abrangente
- Página: Origem no canto superior esquerdo (unidade: pixels)
- Dispositivo: Unidades personalizáveis
Estruturas Geométricas
// Ponto
Ponto pt = new Ponto(10, 20);
// Dimensões
Dimensao dim = new Dimensao(100, 50);
// Retângulo
Retangulo ret = new Retangulo(pt, dim);
Exemplos Práticos
Linhas e Pincéis
Pincel caneta = new Pincel(Color.Vermelho, 3);
Ponto inicio = new Ponto(10, 50);
Ponto fim = new Ponto(250, 50);
Graphics superficie = this.CreateGraphics();
superficie.DrawLine(caneta, inicio, fim);
Preenchimento com Diferentes Pincéis
Retangulo area = new Retangulo(20, 80, 250, 100);
// Pincel sólido
PincelSolido solido = new PincelSolido(Color.Roxo);
// Pincel texturizado
PincelTextura textura = new PincelTextura(new Bitmap(@"c:\textura.jpg"));
superficie.FillRectangle(solido, area);
superficie.FillRectangle(textura, area);
Renderização de Texto
superficie.DrawString(
"Texto de Exemplo",
new Font("Arial", 14, FontStyle.Bold),
new PincelSolido(Color.Azul),
new Ponto(100, 150)
);
Carregamento de Imagens
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawImage(Properties.Resources.Exemplo, new Ponto(50, 50));
}
Implementação: Jogo de Tanques
Estrutura básica para um jogo 2D utilizando GDI+:
public class Tanque : ObjetoMovel
{
public int Vida { get; set; }
private Ponto posicaoOriginal;
public Tanque(int x, int y, int velocidade, Direcao dir)
{
Posicao = new Ponto(x, y);
posicaoOriginal = Posicao;
this.Velocidade = velocidade;
this.DirecaoAtual = dir;
Vida = 4;
}
protected override void VerificarColisoes()
{
// Lógica de detecção de colisões
}
public void Atacar()
{
// Implementação de disparo
}
}
public class GerenciadorJogo
{
private List<Tanque> tanquesInimigos = new List<Tanque>();
public void Inicializar()
{
// Configuração inicial do jogo
}
public void Atualizar()
{
// Loop principal de atualização
}
}
Principais componentes:
- Sistema de animação com thread dedicada
- Gerenciamento de colisões entre projéteis e objetos
- Controle de estados do jogo (execução, game over)
- Renderização otimizada com double buffering