Narzędzia użytkownika

Narzędzia witryny


gil_generic_image_library_-_konwersje

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Next revision
Previous revision
gil_generic_image_library_-_konwersje [2009/04/26 10:57]
bszwajko utworzono
gil_generic_image_library_-_konwersje [2009/04/28 21:29] (aktualna)
bszwajko
Linia 8: Linia 8:
 pozwalają na operowanie na szerokiej gamie formatów obrazów. pozwalają na operowanie na szerokiej gamie formatów obrazów.
 Jej autorami są Panowie [[mailto:​lbourdev@adobe.com|Lubomir Bourdev]] oraz Hailin Jin, pracownicy firmy Adobe. Jej autorami są Panowie [[mailto:​lbourdev@adobe.com|Lubomir Bourdev]] oraz Hailin Jin, pracownicy firmy Adobe.
-Generic Image Library stał się częścią biblioteki Boost począwszy od wersji 1.35.0 (29 Marzec 2008). Obecna wersja GIL to 2.1.1.+Generic Image Library stał się częścią biblioteki Boost począwszy od wersji 1.35.0 (29 Marzec 2008). Obecna wersja GIL to [[http://​opensource.adobe.com/​wiki/​display/​gil/​Downloads|2.1.1]].
  
-Niniejszy tekst ma na celu zaprezentowanie możliwości jakie oferuje GIL w zakresie konwersji + Niniejszy tekst ma na celu zaprezentowanie możliwości jakie oferuje GIL w zakresie konwersji 
-pomiędzy najpopularniejszymi formatami plików graficznych - JPEG, PNG oraz TIFF. Autorzy wyrażają +pomiędzy najpopularniejszymi formatami plików graficznych - JPEG, PNG oraz TIFF. Autorzy wyrażają ​nadzieję iż w przyszłości zakres obsługiwanych formatów zostanie rozszerzony. 
-  * GIL+  ​ 
 +* GIL
        * Extensions        * Extensions
-            * dynamic_image +            * dynamic_image ​- nagłówki związane z dynamicznym tworzeniem obrazów 
-            * i/o+            * i/o - kod obsługujący operacje odczytu/​zapisu
  
 ===== Konwersja z i do podstawowych typów ===== ===== Konwersja z i do podstawowych typów =====
- ​Konwersje pomiędzy formatami plików sprowadzają się przy zastosowaniu biblioteki GIL do wczytania posiadanego pliku do obiektu Image a + ​Konwersje pomiędzy formatami plików sprowadzają się przy zastosowaniu biblioteki GIL do wczytania posiadanego pliku do obiektu ​//Image// 
- ​następnie do zapisania w żądanym formacie.+ ​następnie do zapisania ​go w żądanym formacie.
  Jak wspomniano na wstępie GIL potrafi obsługiwać obrazy niezależnie od formatu ich zapisu. Głównymi parametrami  Jak wspomniano na wstępie GIL potrafi obsługiwać obrazy niezależnie od formatu ich zapisu. Głównymi parametrami
  są przestrzeń kolorów (RGB, CMYK, etc.) oraz głębia kolorów (8bit, 16bit, etc). Stąd też do wczytywania plików z dysku  są przestrzeń kolorów (RGB, CMYK, etc.) oraz głębia kolorów (8bit, 16bit, etc). Stąd też do wczytywania plików z dysku
  ​oferuje szereg przeciążonych metod. Dzielą się one na trzy przypadki:  ​oferuje szereg przeciążonych metod. Dzielą się one na trzy przypadki:
   - gdy znamy dokładny format zapisanego pliku   - gdy znamy dokładny format zapisanego pliku
-  - gdy nie znamy modelu zapisu barw oraz głębi kolorów GIL odczyta je za nas i utworzy automatycznie obiekt zgodny z orginałem+  - gdy nie znamy modelu zapisu barw oraz głębi kolorów GIL odczyta je za nas i utworzy automatycznie obiekt zgodny z oryginałem
   - gdy nie znamy w/w cech i chcemy stworzyć obiekt o zadanych przez nas parametrach   - gdy nie znamy w/w cech i chcemy stworzyć obiekt o zadanych przez nas parametrach
  
- W celu zachowania uniwersalności tego opisu w podanym przykładzie zostanie zaprezentowany przypadek drugi + W celu zachowania uniwersalności tego opisu w podanym przykładzie zostanie zaprezentowany przypadek drugi. Aby możliwa była konwersja formatów zadanych w czasie wykonania programu należy dołączyć następujące nagłówki: 
- +<code cpp> 
 +#include <​boost/​mpl/​vector.hpp>​ 
 +#include <​boost/​gil/​extension/​dynamic_image/​any_image.hpp>​ 
 +#include <​boost/​gil/​extension/​io/​jpeg_dynamic_io.hpp>​ 
 +#include <​boost/​gil/​extension/​io/​png_dynamic_io.hpp>​ 
 +#include <​boost/​gil/​extension/​io/​tiff_dynamic_io.hpp>​
  
-<code cpp>//​ Tworzymy vector z przykładowymi typami obrazów - 8 i 16 bitowe w odcieniach szarości ​orz 8 i 16 bitowe+</​code>​ 
 + 
 + Kod konwertujący ​ zaczynamy następującymi poleceniami:​ 
 + 
 +<code cpp>//​ Tworzymy vector z przykładowymi typami obrazów - 8 i 16 bitowe w odcieniach szarości ​oraz 8 i 16 bitowe
 // obrazy typu RGB - jest to konieczne w przypadku wczytywania informacji o pliku w czasie wykonania // obrazy typu RGB - jest to konieczne w przypadku wczytywania informacji o pliku w czasie wykonania
  
Linia 36: Linia 46:
  
 // klasa any_image pozwala przechować zdjęcie dowolnego typu zawartego w vectorze dynamic_image_t // klasa any_image pozwala przechować zdjęcie dowolnego typu zawartego w vectorze dynamic_image_t
-//      podczas wczytywania porównuje plik na wejściu z typami ​zgormadzonymi ​w vectorze i przypisuje typ obrazu do pierwszego zgodnego wzorca+//      podczas wczytywania porównuje plik na wejściu z typami ​zgromadzonymi ​w vectorze i przypisuje typ obrazu do pierwszego zgodnego wzorca
  
  any_image<​dynamic_image_t>​ dynamic_jpeg_image;​  any_image<​dynamic_image_t>​ dynamic_jpeg_image;​
 </​code>​ </​code>​
  
 +Po utworzeniu obiektu //​any_image//​ możemy wczytać do niego plik z dysku, oczywiście jeśli chcemy wykonać taką operację na kilku obrazkach jednocześnie
 +musimy utworzyć dla każdego z nich oddzielny obiekt //​any_image//​.
 +Przykład wczytania wszystkich trzech obsługiwanych formatów:
 +<code cpp>
 +//​ wczytanie do wcześniej zadeklarowanego obiekty Image obrazu typu JPEG
 +// dla każdego z obsługiwanych typów istnieją oddzielne metody wczytujące
  
-===== Kod z przykładowym wykorzystaniem =====+ std::cout << "​Wczytywanie pliku typu JPEG" << std::​endl;​ 
 + jpeg_read_image("​test.jpg",​ dynamic_jpeg_image);​
  
-  ​+ 
 +//​ wczytanie do wcześniej zadeklarowanego obiekty Image obrazu typu PNG 
 + 
 + std::cout << "​Wczytywanie pliku PNG" << std::​endl;​ 
 + png_read_image("​test.png",​ dynamic_png_image);​ 
 +  
 +//​ wczytanie do wcześniej zadeklarowanego obiekty Image obrazu typu TIFF 
 + 
 + std::cout << "​Wczytywanie pliku TIFF" << std::​endl;​ 
 + tiff_read_image("​test.tiff",​ dynamic_tiff_image);​ 
 +</​code>​ 
 + 
 + 
 +Dane przechowywane w obiekcie //​any_image//​ są w tym momencie wyekstrahowane od swoich pierwotnych typów w postać tablicy 2D w pamięci. 
 +Aby otrzymać plik w żądanym formacie należy wykonać metody zapisujące //​any_image//​ do pliku dyskowego. 
 +<code cpp> 
 +//​ Analogicznie do procesu wczytywania dokonuje się zapisu do pliku  po przez wywołanie odpowiedniej 
 +// do żądnego rozszerzenia metody, zapisu dokonuje się po przez obiekt view (odpowiednik zakresów 
 +// w bibliotece STL) danego obrazu 
 + 
 +        std::cout << "Zapis do pliku JPEG" << std::​endl;​ 
 + jpeg_write_view("​out-tiff-to-jpeg.jpeg",​ const_view(dynamic_tiff_image));​ 
 + 
 + std::cout << "Zapis do pliku PNG" << std::​endl;​ 
 + png_write_view("​out-jpeg-to-png.png",​ const_view(dynamic_jpeg_image));​ 
 + 
 + std::cout << "Zapis do pliku TIFF" << std::​endl;​ 
 + tiff_write_view("​out-png-to-tiff.tiff",​ const_view(dynamic_png_image));​ 
 +</​code>​ 
 + 
 +===== Podsumowanie ===== 
 +Jak widać na pokazanych wyżej przykładach operacje konwersji pomiędzy podstawowymi typami plików graficznych za pomocą Generic Image Library są 
 +niezwykle proste. Dzięki zastosowaniu zunifikowanego i intuicyjnego nazewnictwa można w krótkim czasie opanować potrzebne polecenia.  
 +Należy nadmienić iż do operacji na formatach graficznych wymagane jest dodatkowo dołączenie w czasie kompilacji bibliotek odpowiednich formatów:​ 
 +  * [[http://​www.libtiff.org|libtiff]] 
 +  * [[http://​www.ijg.org|libjpeg]] 
 +  * [[http://​www.ijg.org|libpng]] oraz [[http://​www.zlib.net|zlib]] 
 + 
 + 
 + 
 + 
 + 
 + 
 + 
 +===== Przykładowy kod ===== 
 +  * [[http://​mion.elka.pw.edu.pl/​~bszwajko/​boost_gil-convertion_file_formats.cpp|boost_gil-convertion_file_formats.cpp]] 
 +  * [[http://​home.elka.pw.edu.pl/​~bszwajko/​test.jpg|test.jpg]] 
 +  * [[http://​home.elka.pw.edu.pl/​~bszwajko/​test.png|test.png]] 
 +  * [[http://​home.elka.pw.edu.pl/​~bszwajko/​test.tiff|test.tiff]] 
 + 
 + 
 +===== Linki zewnętrzne ===== 
 +[[http://​stlab.adobe.com/​gil |Strona domowa GIL]]
gil_generic_image_library_-_konwersje.1240736261.txt.gz · ostatnio zmienione: 2009/04/26 10:57 przez bszwajko