Różnice między wybraną wersją a wersją aktualną.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
gil_generic_image_library_-_konwersje [2009/04/26 11:17] bszwajko |
gil_generic_image_library_-_konwersje [2009/04/28 21:14] 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 | ||
Linia 18: | Linia 18: | ||
===== 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// a |
- | 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 | ||
Linia 27: | Linia 27: | ||
- 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> | ||
+ | |||
+ | 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 orz 8 i 16 bitowe | <code cpp>// Tworzymy vector z przykładowymi typami obrazów - 8 i 16 bitowe w odcieniach szarości orz 8 i 16 bitowe | ||
Linia 36: | Linia 45: | ||
// 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; | ||
Linia 43: | Linia 52: | ||
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 | 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//. | musimy utworzyć dla każdego z nich oddzielny obiekt //any_image//. | ||
- | Przykład wczytania wszytskich trzech obsługiwanych formatów; | + | Przykład wczytania wszystkich trzech obsługiwanych formatów: |
<code cpp> | <code cpp> | ||
// wczytanie do wcześniej zadeklarowanego obiekty Image obrazu typu JPEG | // wczytanie do wcześniej zadeklarowanego obiekty Image obrazu typu JPEG | ||
Linia 69: | Linia 78: | ||
// Analogicznie do procesu wczytywania dokonuje się zapisu do pliku po przez wywołanie odpowiedniej | // 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 | // do żądnego rozszerzenia metody, zapisu dokonuje się po przez obiekt view (odpowiednik zakresów | ||
- | // w biblitece STL) danego obrazu | + | // w bibliotece STL) danego obrazu |
std::cout << "Zapis do pliku JPEG" << std::endl; | std::cout << "Zapis do pliku JPEG" << std::endl; | ||
Linia 82: | Linia 91: | ||
===== Podsumowanie ===== | ===== 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]] | ||
- | ===== Kod z przykładowym wykorzystaniem ===== | ||
- | [[http://mion.elka.pw.edu.pl/~bszwajko/boost_gil-convertion_file_formats.cpp|boost_gil-convertion_file_formats.cpp]] | ||
===== Linki zewnętrzne ===== | ===== Linki zewnętrzne ===== | ||
[[http://stlab.adobe.com/gil |Strona domowa GIL]] | [[http://stlab.adobe.com/gil |Strona domowa GIL]] |