Zanim zaczniemy gry i zabawy związane z rysowaniem sprajtów chcę najpierw omówić jeszcze jeden temat, tj. obsługę plików graficznych. Biblioteka SFML na dzień dzisiejszy obsługuje takie formaty plików graficznych jak:
bmp,
dds,
jpg,
png,
tga oraz
psd. Korzystanie z wymienionych formatów plików graficznych nie wymaga z naszej strony wielkiego wysiłku - można wręcz powiedzieć, że obsługę tych formatów uzyskujemy minimalnym możliwym kosztem, jednak o szczegółach dowiesz się w dalszej części niniejszego rozdziału.
Klasa sf::Image
Skupmy się teraz na obrazkach. Obrazki można zarówno tworzyć, wczytywać jak i zapisywać. Do tego celu w bibliotece SFML powołano do życia klasę
Image. Obraz wczytany do klasy
Image może być później wielokrotnie wykorzystywany przy renderowaniu sceny w grze, którą przyjdzie Ci tworzyć. Zanim jednak się tego dowiemy, zajmijmy się najpierw omówieniem podstawowych funkcjonalności tejże klasy.
Wczytywanie pliku z grafiką
Klasa
Image jest kompleksowym narzędziem, umożliwiającym łatwe wczytanie obrazu z pliku jak i z pamięci. Aby wczytać obraz z pliku do pamięci należy najpierw utworzyć obiekt klasy
Image, a następnie wywołać metodę
LoadFromFile. Wspomniana metoda jako argument przyjmuje nazwę pliku, który chcemy wczytać. Kod, który będzie wczytywał nam obraz graficzny może więc wyglądać tak:
sf::Image obrazek;
obrazek.LoadFromFile( "obrazek.png" );
Drugim sposobem na wczytanie pliku graficznego jest metoda
LoadFromMemory. Metoda
LoadFromMemory służy do wczytywania pliku graficznego, który znajduje się w pamięci. Jako pierwszy argument podajemy wskaźnik na bufor z danymi, natomiast drugim argumentem jest rozmiar bufora zawierającego dane. Rozmiar bufora wyrażamy w bajtach.
Obie metody, tj.
LoadFromFile oraz
LoadFromMemory zwracają wartość
true jeżeli uda się wczytać plik graficzny. W przeciwnym wypadku wspomniane metody zwracają wartość
false.
Zapisywanie obrazu do pliku
Każdy obraz wczytany do obiektu typu
Image możemy zapisać. Do tego celu służy metoda
SaveToFile należąca do klasy
Image. Metoda
SaveToFile przyjmuje jako argument nazwę pliku do którego ma zostać zapisany obraz. Format zapisu pliku jest ustalany na podstawie rozszerzenia nazwy pliku, który zostanie przez nas podany. Innymi słowy za pomocą biblioteki SFML możemy w bardzo prosty sposób dokonać konwersji formatu pliku np.
bmp do pliku w formacie dajmy na to
png. Przykład:
sf::Image obraz;
obraz.LoadFromFile( "obrazek.bmp" );
obraz.SaveToFile( "obrazek.png" );
Zrzut ekranu do pliku
Kolejnym bardzo fajnym i przyjemnym aspektem biblioteki SFML jest możliwość robienia zrzutu ekranu do pliku, wykonując przy tym minimalny nakład pracy. Klasa
sf::RenderWindow posiada bowiem metodę
Capture, która zwraca nam obiekt typu
Image, który to z kolei zawierać będzie obecny zrzut z ekranu. Przykładowo jeżeli chcemy aby przycisk F1 robił nam zrzut ekranu do pliku to wystarczy, że napiszemy następujący kod:
if( zdarzenie.Key.Code == sf::Key::F1 )
{
sf::Image zrzutEkranu = oknoAplikacji.Capture();
zrzutEkranu.SaveToFile( "zrzut-ekranu.png" );
}
Pamiętaj jednak, że istotne jest miejsce w którym umieścisz wspomniany wyżej kod. Metoda
Capture pobiera aktualną zawartość bufora ekranu, więc w zależności od miejsca wywołania metody
Capture zawartość otrzymanego obrazu będzie różna. Zazwyczaj metodę zrzutu ekranu wywołuje się bezpośrednio przed wywołaniem metody
Display należącej do klasy
sf::RenderWindow.
Tworzenie pustego obrazu
Ostatnią kwestią, która została do omówienia w niniejszym rozdziale jest możliwość tworzenia pustego obrazu o określonych wymiarach. Pusty obraz można utworzyć poprzez wywołanie metody
Create należącej do klasy
Image. Pierwsze dwa argumenty metody
Create określają szerokość i wysokość obrazu, natomiast trzecim opcjonalnym argumentem jest kolor obrazu na jaki ma zostać wyczyszczony. Domyślnie jest to kolor czarny.
Inne możliwości klasy sf::Image
O innych możliwościach klasy
Image możesz przeczytać w dokumentacji
SFML 1.6.