Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Allegro 5] Problem z funkcja Sprawdzania Pixeli

Ostatnio zmodyfikowano 2011-01-30 17:09
Autor Wiadomość
eBbi
Temat założony przez niniejszego użytkownika
[Allegro 5] Problem z funkcja Sprawdzania Pixeli
» 2011-01-30 14:54:49
Witam.
     Mam mały problem w allegro 5 z funkcja sprawdzająca kolor piksela.

   al_get_pixel
  ALLEGRO_COLOR al_get_pixel(ALLEGRO_BITMAP *bitmap, int x, int y);


jest to dość dziwnie zrobiona funkcja bo odczytuje piksel tylko z bitmap.
I tu mam kilka pytań:
 - co dać w pierwszym argumencie żeby odczytywało piksel z buffora... obrazki tam już są i czekają na wyświetlanie.
  // próbuje z parametrem 0 ale coś nie wychodzi
 - z czym porównywać wynik tej funkcji?
 

 if(al_get_pixel(0,300,200)==al_map_rgb(255,255,255))
    std::cout<<"tak";
 
 przy takiej próbie porównania wyskakuje mi błąd:
 
no match for 'operator==' in 'al_get_pixel(0u, 300, 200) == al_map_rgb(255, 255, 255)
       candidates are: BOOL operator==(const GUID&, const GUID&)
  
P-27500
McAffey
» 2011-01-30 15:04:01
Przecież bufor też jest bitmapą, wystarczy
al_get_pixel( bufor, x, y );
 

edit: Jak chcesz pozyskać dokładny kolor w systemie RGB użyj
C/C++
int r = getr( getpixel( bufor, x, y ) );
int g = getg( getpixel( bufor, x, y ) );
int b = getb( getpixel( bufor, x, y ) );
P-27501
eBbi
Temat założony przez niniejszego użytkownika
» 2011-01-30 15:11:39
bufor to bitmapa w allegro 4, nie 5
P-27502
McAffey
» 2011-01-30 15:12:38
A to przepraszam, dawno allegro nie używałem i chyba jestem trochę nie na bieżąco ;)
P-27503
pekfos
» 2011-01-30 15:13:51
huh, ja uznaję tylko allegro 4.2.2. mniej problemów z tą wersją
P-27504
DejaVu
» 2011-01-30 15:32:49
Pierwszy argument to BITMAP* czyli bitmapa. Ty podajesz 0, czyli NULL czyli nie określasz obiektu z którego ma odczytać kolor piksela.
P-27512
szyx_yankez
» 2011-01-30 15:44:09
Ja zawsze to tak robiłem:
C/C++
int r, g, b;
ALLEGRO_COLOR color = al_get_pixel( bmp, x, y );
al_unmap_rgb( color,( unsigned char * ) & r,( unsigned char * ) & g,( unsigned char * ) & b );
if( r == 255 && g == 255 && b == 255 )
{
    //
}
A jak chcesz żeby Ci to działało 10000x szybciej zrób tak:
C/C++
ALLEGRO_LOCKED_REGION * lock = al_lock_bitmap( bmp, ALLEGRO_PIXEL_FORMAT_ANY, ALLEGRO_LOCK_READWRITE );
int r, g, b;
ALLEGRO_COLOR color = al_get_pixel( bmp, x, y );
al_unmap_rgb( color,( unsigned char * ) & r,( unsigned char * ) & g,( unsigned char * ) & b );
al_unlock_bitmap( bmp );
if( r == 255 && g == 255 && b == 255 )
{
    //
}
P-27519
eBbi
Temat założony przez niniejszego użytkownika
» 2011-01-30 16:19:23
dobra, ale jak to odczytać z buffora? ty masz w argumencie jakieś bmp
P-27523
« 1 » 2
  Strona 1 z 2 Następna strona