Dlaczego przezroczystość wyłącza renderowanie subpikseli w programie Adobe Reader?

9

Zwykle wolę Adobe Reader (nadal v9 w systemie Linux) od wszystkich innych przeglądarek PDF, ponieważ myślę, że ma najlepszą jakość renderowania, nawet jeśli inni ostatnio nadrobili zaległości. Ta jakość renderowania wydaje się być w dużej mierze spowodowana CoolType, implementacją renderowania subpikseli przez Adobe. Niestety odkryłem, że Adobe Reader konsekwentnie wyłącza renderowanie subpikseli (dla poszczególnych stron), gdy tylko strona zawiera przezroczyste elementy. Przykład:

Niebieski kształt jest nieprzezroczysty, tekst jest renderowany przy użyciu subpikseli:

nieprzezroczysty

Niebieski kształt jest w 50% przezroczysty, tekst jest renderowany ze standardowym wygładzaniem krawędzi:

przezroczysty

Dwa odpowiadające pliki pdf zostały wygenerowane dokładnie w ten sam sposób (przy użyciu TikZ / PGF z pdflatex), z wyjątkiem określenia przezroczystości w drugim przypadku. Zrobiłem te pliki PDF sam, ale często obserwowałem ten sam efekt z plikami PDF z zupełnie innych źródeł. O dziwo, Foxit Reader i Okular renderują te same pliki pdf w dokładnie identyczny sposób (z wyjątkiem oczywiście samej przezroczystej części), ale z ogólnie gorszą jakością IMHO.

Moje pytanie: Czy ktoś wie, dlaczego tak się dzieje i czy / jak można tego uniknąć?

A. Donda
źródło
Może to być błąd w programie Adobe, lepiej zgłaszany na forach. Możesz spróbować poprawić wyświetlanie czcionek w systemie Linux (która wersja?), Używając Infinality . Zobacz także Konfiguracja czcionek archlinux - Infinality .
harrymc
@harrymc Wątpię, aby miało to wpływ na renderowanie czcionek Adobe Reader, ale w przeciwnym razie jest to interesująca wskazówka. Może Okular jest lepszy w ten sposób. Dzięki!
A. Donda,
@slhck, myślałem, że naliczyłem za to nagrodę? Czy w jakiś sposób to przejęłaś, czy jestem tylko zdezorientowany? Mimo wszystko dziekuję!
A. Donda,

Odpowiedzi:

1

Renderowanie subpikseli odbywa się za pomocą poszczególnych kolorów piksela. Każdy piksel na ekranie składa się z jeszcze mniejszego piksela w kolorze czerwonym, zielonym i niebieskim.

Jeśli chcesz renderować obiekt o szerokości 10,3 pikseli, użyjesz tylko czerwonego koloru 11 piksela. Ekran emitowałby wówczas światło z 31 subpikseli, czyli 10 pełnych pikseli, a następnie jedna trzecia piksela.

Jeśli spróbujesz sam zasymulować ten efekt, po prostu rysując 10 białych pikseli szerokości, a następnie czerwony piksel po prawej stronie na czarnym tle, sam zobaczysz efekt.

Problem polega na tym, że zauważysz, że prawa krawędź będzie czerwona, jeśli zrobisz to w ten sposób. Najprawdopodobniej Adobe musi użyć zaawansowanych algorytmów, aby wyeliminować ten efekt - być może poprzez zwiększenie wartości czerwonego i zielonego 10-tego piksela.

Dodanie przezroczystości do algorytmu, który jest już dość zaawansowany, jest prawdopodobnie czymś, czego jeszcze nie rozwiązali, dlatego po prostu wyłączają renderowanie subpikseli.

Wydaje mi się, że tak jest, ponieważ próbowałem zaimplementować renderowanie subpikseli w ten naiwny sposób i sam widziałem efekt „kolorowej strony”.

frodeborli
źródło
Tak, efekt kolorowej krawędzi jest zdecydowanie obecny, widać go również na powiększonych zrzutach ekranu powyżej i tak naprawdę nie widzę, jak można tego uniknąć. Myślę, że renderowanie subpikseli ma sens tylko wtedy, gdy całe piksele są już małe. Może masz rację, że to po prostu zbyt skomplikowane.
A. Donda,
Uważam, że są zbyt skomplikowane. Jeśli nie, technologia nie byłaby warta tak fajnych nazw :)
frodeborli
Tylko uwaga: kolejność podpikseli może nie zawsze być RGB. Jeśli spojrzymy na zrzuty ekranu dostarczone przez OP, wydaje się, że jest to uporządkowane BGR: subpiksele na lewej krawędzi są czerwone, a subpiksele na prawej krawędzi są niebieskie.
Johan Boulé
0

Może to być błąd w programie Adobe, lepiej zgłaszany na forach.

Aby poprawić wyświetlanie czcionek w systemie Linux, możesz spróbować użyć Infinality:

Infinality to zestaw poprawek Freetype, które próbują zapewnić lepsze renderowanie czcionek dla systemu Linux, a także, aby umożliwić łatwą personalizację, dzięki czemu użytkownicy mogą dostosować ustawienia do swoich upodobań. Za jego pomocą możesz łatwo ustawić styl czcionki, aby emulować OSX, OSX2, Windows 98, Windows XP lub Windows 7 lub możesz użyć stylów „Linux” lub „Infinality” (domyślne).

Widzieć :

Lepsze renderowanie czcionek w systemie Linux z Infinality
Konfiguracja czcionki archlinux - Infinality .

harrymc
źródło
Doceniam wskazówki i pójdę i zapytam na forach Adobe. Jednak nie sądzę, że kwalifikuje się to jako odpowiedź.
A. Donda,
Nie ma problemu. Czy chcesz, żebym to usunął?
harrymc
Nie, chciałem tylko wyjaśnić, dlaczego nie głosowałem za głosem.
A. Donda,
Niestety, wydaje się, że to jedyna odpowiedź, jaką otrzymasz.
harrymc