Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: Piotr Szawdyński
Biblioteki C++

Wczytywanie i zapisywanie plików graficznych

[lekcja] Rozdział 6. Tworzenie pustego obrazu i wczytywanie obrazu z pliku jak również z pamięci. Ponadto zapisywanie obrazu do pliku oraz robienie zrzutów ekranu (ang. screen shot).
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ę » SFML 1.6Image. Obraz wczytany do klasy » SFML 1.6Image 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 » SFML 1.6Image 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 » SFML 1.6Image, a następnie wywołać metodę » SFML 1.6 » ImageLoadFromFile. 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:
C/C++
sf::Image obrazek;
obrazek.LoadFromFile( "obrazek.png" );
Drugim sposobem na wczytanie pliku graficznego jest metoda » SFML 1.6 » ImageLoadFromMemory. Metoda » SFML 1.6 » ImageLoadFromMemory 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. » SFML 1.6 » ImageLoadFromFile oraz » SFML 1.6 » ImageLoadFromMemory 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 » SFML 1.6Image możemy zapisać. Do tego celu służy metoda » SFML 1.6 » ImageSaveToFile należąca do klasy » SFML 1.6Image. Metoda » SFML 1.6 » ImageSaveToFile 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:
C/C++
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 » SFML 1.6Image, 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:
C/C++
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 » SFML 1.6 » ImageCreate należącej do klasy » SFML 1.6Image. Pierwsze dwa argumenty metody » SFML 1.6 » ImageCreate 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 » SFML 1.6Image możesz przeczytać w dokumentacji » DokumentacjaSFML 1.6.
Poprzedni dokument Następny dokument
Okno renderujące grafikę Tworzenie i wyświetlanie sprajtów