Introdução à Programação Gráfica com GDI+ em C#

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çadas
  • System.Drawing.Imaging: Manpiulação de imagens
  • System.Drawing.Text: Gerenciamento de coleções de fontes
  • System.Drawing.Printing: Operações de impressão

Classes principais:

  • Graphics: Superfície de desenho principal
  • Pen: Define propriedades para traçados
  • Brush: Preenchimento de formas geométricas
  • Font: Configurações tipográficas
  • Image: 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:

  1. Global: Escopo abrangente
  2. Página: Origem no canto superior esquerdo (unidade: pixels)
  3. 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

Tags: C# GDI+ WinForms Desenho-2D Jogos

Publicado em 6-16 21:07 por Thomas