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.6 ♦ Image. Obraz wczytany do klasy » SFML 1.6 ♦ 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 » SFML 1.6 ♦ 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 » SFML 1.6 ♦ Image, a następnie wywołać metodę » SFML 1.6 » Image ♦ 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:
C/C++
sf::Image obrazek;
obrazek.LoadFromFile( "obrazek.png" );
Drugim sposobem na wczytanie pliku graficznego jest metoda » SFML 1.6 » Image ♦ LoadFromMemory. Metoda » SFML 1.6 » Image ♦ 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. » SFML 1.6 » Image ♦ LoadFromFile oraz » SFML 1.6 » Image ♦ 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 » SFML 1.6 ♦ Image możemy zapisać. Do tego celu służy metoda » SFML 1.6 » Image ♦ SaveToFile należąca do klasy » SFML 1.6 ♦ Image. Metoda » SFML 1.6 » Image ♦ 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:
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.6 ♦ 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:
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 » Image ♦ Create należącej do klasy » SFML 1.6 ♦ Image. Pierwsze dwa argumenty metody » SFML 1.6 » Image ♦ 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 » SFML 1.6 ♦ Image możesz przeczytać w dokumentacji » Dokumentacja ♦ SFML 1.6.
Poprzedni dokument Następny dokument
Okno renderujące grafikę Tworzenie i wyświetlanie sprajtów