
Zamieszczone przez
pkoprowski
Ughhh... Odpowiedź już kilka razy się w tym wątku pojawiła. Ale jako, że jestem jednym z tych "paskudnych profesorów", co to tak fatalnie uczą (chociaż Ciebie, to raczej nie miałem szansy nauczać), to postaram się jeszcze raz.
Pomińmy póki co kompresję. Nieskompresowany obraz, to (pomijając kilka bardzo egzotycznych formatów) po prostu prostokątna tablica pikseli H wierszy po W pikseli w wierszu; zapisanych typowo wiersz po wierszu (1) jako długi ciąg danych. Żeby jakikolwiek program mógł zinterpretować te dane, liczby W, H muszą być zawarte w obszarze znaczników (nagłówku) pliku. Po prostu po to, żeby program "wiedział", że co W pikseli ma zmienić wiersz, a jak wyświetli/wydrukuje H wierszy, to już nie ma co zaczynać kolejnego. Wielkości W, H są bezwymiarowe. W tym samym nagłówku mogą, choć nie muszą, być zawarte też dwie kolejne informacje oczekiwany rozmiar liniowy obrazu WL x HL wyrażony w jednostkach fizycznych (np. metrach, calach,...) i/lub oczekiwana rozdzielczość obrazu R, oznaczająca ile pikseli ma przypaść na jednostkę długości (typowo na cal lub metr) wyrażoną jaki ppi lub ppm. Związek między (W,H), (WL,HL) oraz R jest oczywisty (2):
W = WL*R, H = HL*R
Jeżeli wszystkie trzy informacje są w pliku podane, to powyższe zależności powinny być pomiędzy nimi zachowane. Program odwołujący się do pliku obrazu musi wykorzystać wartości W,H i może wykorzystać WL,HL lub R.
Teraz załóżmy, że obraz zawarty w pliku ma zostać wyświetlony na ekranie komputera. Piksele obrazu muszą zostać jakość odwzorowane na piksele bufora ekranowego. W najprostszym i najczęściej spotykanym przypadku, program ignoruje wówczas całkowicie informacje WL, HL, R odwzorowując obraz 1:1 - to jest pojedynczy piksel obrazu zostaje odwzorowany na pojedynczy piksel bufora ekranowego. Tak wyświetlony obraz wynikowy ma oczywiście pewne wymiary liniowe, ale wynikają one wyłącznie z rozmiarów W,H obrazu i natywnej rozdzielczości matrycy monitora. Przykładowo, mój monitor Eizo FlexScan ma ok. 33,5cm szerokości na którą przypada 1280 pikseli. Zatem jego rozdzielczość, to 1280/0.335 ~ 3820ppm ~ 150ppm. I taką rozdzielczość będzie miał każdy obraz wyświetlony na tym monitorze 1:1.
Idąc krok dalej, program może dopuszczać skalowanie obrazu, gdzie na jeden piksel matrycy przypada n pikseli obrazu. W tym modelu nadal jednak informacja WL,HL, R jest do niczego nie potrzebna. W ten sposób działają przeglądarki internetowe.
Jeżeli jednak mamy bardzo sprytny program, który w dodatku "wie" jakie są fizyczne wymiary monitora, to może policzyć o ile należy przeskalować obraz, żeby przy wyświetlaniu na monitorze wymiary fizyczne obrazu zgadzały się z oczekiwanymi wymiarami WL, HL.
Załóżmy teraz, że chcemy ten obraz wydrukować na drukarce. Program obsługujący wydruk ma kilka możliwości. Może zignorować całkowicie informacje o rozmiarach fizycznych nośnika na którym drukujemy jak i oczekiwanych wymiarach obrazu i odwzorować 1:1 piksele obrazu na plamki drukarki (3). Działa to więc tak jak dla monitora, wynik będzie zazwyczaj dość niepożądany. Rozmiary fizyczne wydrukowanego obrazu pewnie nijak się nie będą miały do wymiarów nośnika... chyba, że obraz wstępnie (w programie graficznym) przeskalowaliśmy tak, aby jego wymiar WxH odpowiadał rozmiarom nośnika przemnożonym przez rozdzielczość, w której pracuje drukarka. Ten sposób działania programów drukujących jest obecnie (na szczęście) skrajnie rzadko spotykany.
Druga możliwość jest taka, że program drukujący zignoruje informacje WL,HL,R i przeskaluje obraz tak, aby zajmował cały rozmiar nośnika (a przynajmniej jeden z wymiarów jeśli proporcje się nie zgadzają). To wiąże się zazwyczaj z koniecznością skalowania/re-próbkowania obrazu co może prowadzić do degradacji jakości - spadku ostrości... chyba, że obraz wstępnie (w programie graficznym) przeskalowaliśmy tak, aby jego wymiar WxH odpowiadał rozmiarom nośnika przemnożonym przez rozdzielczość, w której pracuje drukarka.
Ostatnia możliwość jest taka, że program obsługujący wydruk zignoruje fizyczne wymiary nośnika i zachowa wymiary WL,HL obrazu przy wydruku. Jeżeli jednak rozdzielczość, w której pracuje drukarka różni się od rozdzielczości R obrazu, operacja taka znów wymaga skalowania/re-próbkowania obrazu, co j/w może się wiązać z jego degradacją... chyba, że obraz wstępnie (w programie graficznym) przeskalowaliśmy tak, aby jego wymiar WxH odpowiadał rozmiarom nośnika przemnożonym przez rozdzielczość, w której pracuje drukarka.
Pominę kwestię co się dzieje przy wysyłaniu obrazu do naświetlarni - nie chce mi się już dalej klepać w klawiaturę, a ludzie, którzy przygotowują obrazy do druku offsetowego i tak tego tłumaczenia nie potrzebują.
Ad (1) To nie zawsze jest prawda, ale tutaj upraszczamy w celach dydaktycznych.
Ad (2) Dla uproszczenia zakładam tutaj "kwadratowe piksele".
Ad (3) Celowo dość skrajnie tu upraszczam pomijając wszelkie kwestie ditheringu stochastycznego itp.