Carregando PNG com Allegro

Este site mudou de endereço. Para acessar o artigo completo, acesse: Carregando PNG com Allegro

Muita gente tem problemas com PNG no Allegro, mas aqui eu vou mostrar como carregar PNG32 e blitar com Canal Alpha facilmente no Dev-C++. O interessante é que você pode utilizar Anti-Aliasing, ou efeitos de transparência, sombra, glow para darem um visual mais bonito. Mas lembre-se que isso exige bastante processamento. O Ideal seria utilizar aceleração via hardware, para isso, mas como o Allegro não suporta, apenas tome cuidado com muitos canais alpha! =D

Primeiramente, baixe, se você já não tiver, os pacotes da libpng e da AllegroPNG, que é a ponte entre o Allegro e a libpng, no DevPaksRepository.

Faça uma imagem utilizando transparência e anti-aliasing no seu editor de imagens favorito (Eu uso o Fireworks) e exporte com PNG32. Veja a minha imagem:

Agora inicie um projeto no Dev-C++ de Allegro, e inclua o header do AllegroPNG, assim:

#include <alpng.h>

Então adicione as bibliotecas estáticas no linkador, vá em Projeto -> Opções de Projeto -> Parâmetros. Lá você já vê a lib -lalleg, adicione a -lalpng ANTES da lib do Allegro, ficando assim: -lalpng -lalleg.

Agora voltemos para o código… hehehe

Nós temos duas opções interessantes, podemos simplismente carregar os PNGs com a função load_png, ou utilizar a função load_bitmap normalmente, mas para usar a função de carregamento universal do Allegro (load_bitmap), você tem que inicializar a AllegroPNG na inicialização do Programa, assim:

alpng_init();

Por que assim, ela já registra no Allegro o novo formato de arquivo. Mas se não fizer isso, é só carregar normalmente pela função load_png, assim:

BITMAP *png = load_png("imagem.png", NULL);

Este site mudou de endereço. Para acessar o artigo completo, acesse: Carregando PNG com Allegro

7 Respostas

  1. Aew! Mais tutorial favoritado ^^!
    Cara eu li no bdjogos, que o allegro tem suporte a aceleração por hardware, com o argumento GFX_BWINDOWSCREEN_ACCEL que é exclusivo pra full screen…
    Valeu pelo tutorial 🙂

  2. tem também o GFX_DIRECTX e o GFX_DIRECTX_WIN
    =D

    [OFF]
    Quando vai sair o tutorial sobre TinyXML?
    [/OFF]

  3. O DirectX eu Conheço, mas não uso muito por causa que é só para WIndows, mas o GFX_BWINDOWSCREEN_ACCEL eu não conhecia! É multiplataforma?? =D

    Ahhh, pode crerr, eu já tinha até esquecido do tuto de TinyXML! hehehe

    Vou começar a fazer ele então! xD

    Vlwww

  4. Acabei de ver, o GFX_BWINDOWSCREEN_ACCEL só funciona no BeOS, para Windows tem o DirectX e para Linux tem que usar o GFX_XDGA2, porém este driver precisa de permissões do Root…

    Vlwww =D

  5. Nossa cara, tá dificill aki viu, toh querendo usar a transparencia no allegro, 1° tentei com imagens formato bmp deixando as partes que qro transparente da cor rosa(255,0,255) e não deu certo, num sei pq, alias se tiver uma ideia do que pode ser, por favor fala ai

    e agora não consigo compilar usando o formato png, acho que porque não tenho o pacote da libpng, mas não o achei pra baxar no compilador direto, na parte onde se baixa pacotes e na internet todas os downloads que fiz sempre vem a pasta com todos os arquivos e não vem u instalador automatico.. em ajuda ai, qria instalar e poder usar png no allegroo

    vlww desde jah.. abratzz

  6. Olá Guh…

    Então, você imprimiu os bitmaps transparentes com qual função? A draw_sprite funciona perfeitamente, porém a blit não oferece transparência, por isso utilize a masked_blit (que tem os parâmetros idênticos a da blit), caso precise da blit.

    Quanto a baixar a libpng, baixe no site:
    http://www.devpaks.org/

    Lá tem muuuuuitas libs no formato DevPak para instalar diretamente no DevC++! 🙂

    Falou

  7. Amigo, estive tentando fazer seu exemplo, e consegui, porém ele mudou as cores originais, apesar de ter ficado transparente, mudou as cores.

    Utilizei o Photoshop para fazer o PNG e salvei como PNG (Não há PNG32), de qualquer forma, se puder me contacta pelo meu email, tenho até semana que vem para fazer uma interface em Allegro. =/

    Fico no aguardo.
    Fica na paz.

Deixar mensagem para crocidb Cancelar resposta