Składnia
#include <sdl/SDL.h>
int SDL_BlitSurface( SDL_Surface * src, SDL_Rect * srcrect, SDL_Surface * dst, SDL_Rect * dstrect );
Argumenty
Zwracana wartość
Funkcja
SDL_BlitSurface zwraca wartość
0 gdy operacja powiedzie się, w przeciwnym wypadku zwraca wartość różną od zera. Zazwyczaj zwracaną wartością jest
-1.
Jeżeli obie powierzchnie były w pamięci karty graficznej i funkcja
SDL_BlitSurface zwróci wartość -2 oznaczać to będzie, że zawartość pamięci karty graficznej uległa utracie i powinna ona zostać załadowana ponownie.
Powyższa sytuacja ma miejsce dla
DirectX 5.0, gdy Twoja aplikacja wychodzi z trybu pełnoekranowego. Blokowanie powierzchni również nie zadziała dopóki nie odzyskasz ponownie dostępu do pamięci karty graficznej. W związku z powyższym sugeruje się zastosowanie następującego rozwiązania:
while( SDL_BlitSurface( image, imgrect, screen, dstrect ) == - 2 ) {
while( SDL_LockSurface( image ) < 0 )
SDL_Delay( 10 );
SDL_UnlockSurface( image );
}
Opis szczegółowy
Funkcja służy do kopiowania wycinka obrazu z jednej powierzchni na drugą. Fragment obrazu, który będzie kopiowany do powierzchni
dst określa argument
srcrect. Jeżeli argument
srcrect będzie równy
NULL to zawartość całego obrazka źródłowego zostanie skopiowana.
Jeżeli
dstrect jest równy
NULL to wycinek obrazu źródłowego zostanie umieszczony na powierzchni docelowej od pozycji (0,0), która stanowi lewy górny róg powierzchni.
Jeżeli argument
dstrect jest różny od
NULL to kopiowany obraz zostanie przycięty do wymiarów określonych przez wspomniany argument. Powierzchnia źródłowa nie ulega jednak żadnym modyfikacjom.
Operacja kopiowania nie powinna odbywać się na zablokowanych powierzchniach. W przypadku własnych funkcji rysujących może być wymagane założenie blokady, niemniej jednak wymóg ten nie dotyczy funkcji
SDL_BlitSurface.
Uwaga!
Pamiętaj, że nie należy wykorzystywać niniejszej funkcji w połączeniu z OpenGL'em. |
Dodatkowe informacje
Funkcja
SDL_BlitSurface nie potrafi przeskalowywać powierzchni. Sugeruje się zastosowanie własnych mechanizmów, bądź wykorzystać bibliotekę
SDL_gfx.
Jeżeli wykonujesz operację kopiowania na dwóch powierzchniach posiadających kanał alfa to zazwyczaj kanał alfa powierzchni docelowej zachowuje się jak maska. Jeżeli chcesz wykonać zwykłą kopię obrazu, która nie uwzględnia mieszania kolorów to musisz wyłączyć kanał alfa dla powierzchni źródłowej za pomocą flagi SDL_SRCALPHA. |
Pamiętaj, że zachowanie niniejszej funkcji jest de'facto nieprzewidywalne w przypadku, gdy łączysz dwie powierzchnie, posiadające włączony kanał alfa i obie powierzchnie posiadają przeźroczyste tło. |
Przykład
SDL_Init( SDL_INIT_VIDEO );
SDL_Surface * ekran = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
SDL_Surface * obazek = SDL_LoadBMP( "picture.bmp" );
SDL_Rect destRect;
destRect.w = picture->w;
destRect.h = picture->h;
destRect.x = 20;
destRect.y = 30;
SDL_BlitSurface( obazek, NULL, ekran, & destRect );
SDL_Flip( ekran );
SDL_FreeSurface( obazek );
SDL_Quit();
Linki zewnętrzne
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.