[C++][Linux][Allegro] prezzroczystosc png

0

Witam, mam pytanie czy ktoś z Was pisał jakąś aplikację/grę pod allegro.h i robił przezroczyste grafiki w formacie *.png, który to bowiem obsługuje przezroczystość.
Mam mały problem polegający na tym, że grafikę zapisaną w postaci png chce wyświetlić na ekran z pełną przezroczystością. Pełna przezroczystość rozumiem w ten sposób, że nie muszę używać różowego tła. Chciałbym, w aplikacji działała przezroczystość pixeli zawarta w png. Wiem, że można takie coś obsłużyć, jednak po kilku godzinach szukania nie mogę odnaleźć odpowiedniej funkcji.
Do tej pory używam następujących funkcji po kolei:

// Użyte biblioteki
#include <allegro.h> 
#include <alpng.h>

// Graficzne zmienne klasy
BITMAP *bufor, *p1_gfx;

// Konstruktor klasy
allegro_init();
alpng_init();

// Destruktor klasy
destroy_bitmap(bufor);
destroy_bitmap(p1_gfx);
allegro_exit();

// Wywołanie wypisania na ekran w jednej z metod:
masked_blit(p1_gfx,bufor,0,0,p1.x,p1.y,p1_gfx->w,p1_gfx->h); 

// szukam odpowiednika funkcji powyżej, która wrzuci do bufora grafikę z przezroczystym tłem, tak jak w pliku png.

Nie wrzucałem całości, bo troszkę za dużo tego kodu by było.
Jeśli ktoś z Was zrobił kiedykolwiek przezroczystość to na pewno będzie wiedział o jaką funkcje chodzi.

Z góry dzięki za pomoc. Pozdrawiam
W razie jak ktoś chciałby powiedzieć/wiedzieć coś więcej, co może przybliżyć rozwiązanie to chętnie posłucham.

#Update:
Użycie:

draw_sprite(p1_gfx,bufor,p1.x,p1.y);

Powoduje zniknięcie grafiki o nazwie "p1_gfx". Nie pojawia się ona w ogóle. Tak więc funkcja jest kopnięta lub źle jej używam.

0

Tutaj szukales odowiedzi ?
<url>http://www.allegro.cc/manual/api/transparency-and-patterned-drawing/ </url>
Jesli chodzi o funkcje drawsprite() to moze po prostu po skopiowaniu grafiki na ekran nie odswiezasz ekranu i tu lezy problem. Kiedys pisalem w allegro pod linuxem ale napisalem tylko cos jak arkanoid i od tamtej pory w ogóle nie wracalem do tej biblioteki.

0

Przypomniało mi się o tym temacie przed chwilą. Rozwiązałem swój problem. Wiem, że ciężko znaleźć odpowiedź na to proste pytanie. Tak więc:

Aby wykorzystać przezroczystość w plikach *.png należy dołączyć bibliotekę 'alpng.h', która pozwoli nam załadować pliki png. Dodatkowo należy zainicjować działanie przezroczystości poprzez funkcje: set_alpha_blender().
Ostatecznie do rysowania grafik o przezroczystym tle należy używać funkcji:

draw_trans_sprite(BITMAPa_docelowa, BITMAPa_zrodlowa, X, Y);

W całości wyglądałoby to tak:

#include <allegro.h> 
#include <alpng.h>

class Transparency{
	private:
	BITMAP *test, *bufor;
	int x,y; // Pozycja wyświetlanej grafiki
	public:
	Transparency(){
		alpng_init();
		allegro_init();
		install_keyboard();
		set_alpha_blender();
		set_color_depth(32);
		set_gfx_mode(2,800,600,0,0); // Tryb okienkowy, 800x600
		set_palette(default_palette);
		bufor = create_bitmap(800,600);
		test = load_png("test.png",default_palette);
		x = 400;
		y = 300;
	}
	~Transparency(){ // Destruktor
		destroy_bitmap(bufor);
		destroy_bitmap(test);
		allegro_exit();
	}
	void draw(){
		clear_to_color(bufor, makecol(0,0,0)); // Zamalowywanie bufora na czarno
		draw_trans_sprite(bufor, test, x, y); // Buforowanie przezroczystej grafiki
		blit(bufor,screen,0,0,0,0,800,600); // Bufor na ekran
	}
	void move(){
		if(key[KEY_UP]) y--;
		else if(key[KEY_DOWN]) y++;
		if(key[KEY_LEFT]) x--;
		else if(key[KEY_RIGHT]) x++;
	}
};

int main(){
	Transparency *t = new Transparency;
	while(!key[KEY_Q]){ // Q wychodzi z programu
		t->draw();
		t->move();
	}
	delete t;
	return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1