Warum deaktiviert Transparenz das Rendern von Subpixeln in Adobe Reader?


9

Normalerweise bevorzuge ich Adobe Reader (immer noch v9 unter Linux) gegenüber allen anderen PDF-Viewern, da ich denke, dass es die beste Renderqualität hat, obwohl andere in letzter Zeit aufgeholt haben. Diese Renderqualität scheint zu einem großen Teil auf CoolType zurückzuführen zu sein, die Implementierung des Subpixel-Renderings durch Adobe. Leider habe ich festgestellt, dass Adobe Reader das Rendern von Subpixeln (pro Seite) konsequent ausschaltet, sobald die Seite transparente Elemente enthält. Ein Beispiel:

Die blaue Form ist undurchsichtig, der Text wird mit Subpixeln gerendert:

undurchsichtig

Die blaue Form ist zu 50% transparent, der Text wird mit Standard-Antialiasing gerendert:

transparent

Die beiden entsprechenden PDF-Dateien wurden auf genau dieselbe Weise generiert (unter Verwendung von TikZ / PGF mit pdflatex), mit Ausnahme der Angabe der Transparenz im zweiten Fall. Ich habe diese PDFs selbst erstellt, aber ich habe häufig den gleichen Effekt bei PDFs aus völlig unterschiedlichen Quellen beobachtet. Seltsamerweise rendern Foxit Reader und Okular die gleichen zwei PDFs auf genau identische Weise (außer natürlich für den transparenten Teil selbst), aber meiner Meinung nach in einer allgemein schlechteren Qualität.

Meine Frage: Weiß jemand, warum dies passiert und ob / wie es vermieden werden kann?


Dies kann ein Fehler in Adobe sein, der besser in den Foren angesprochen wird. Sie können versuchen, die Anzeige von Schriftarten unter Linux (welche Version?) Mit Infinality zu verbessern . Siehe auch archlinux Font Configuration - Infinality .
Harrymc

@harrymc Ich bezweifle, dass dies Auswirkungen auf das Rendern von Adobe Reader-Schriftarten hat, aber ansonsten ist es ein interessanter Tipp. Vielleicht wird Okular auf diese Weise besser. Vielen Dank!
A. Donda

@slhck, ich dachte ich hätte ein Kopfgeld darauf gesetzt? Hast du das irgendwie übernommen oder bin ich nur verwirrt? Trotzdem danke!
A. Donda

Antworten:


1

Das Rendern von Subpixeln erfolgt unter Verwendung der einzelnen Farben eines Pixels. Jedes Pixel auf einem Bildschirm besteht aus einem noch kleineren Pixel mit den Farben Rot, Grün und Blau.

Wenn Sie ein Objekt mit einer Breite von 10,3 Pixel rendern möchten, verwenden Sie nur die rote Farbe des 11. Pixels. Der Bildschirm würde dann Licht von 31 Subpixeln emittieren, dh 10 Vollpixel und dann ein Drittel eines Pixels.

Wenn Sie versuchen, diesen Effekt selbst zu simulieren, indem Sie einfach 10 weiße Pixel breit und dann ein rotes Pixel rechts auf schwarzem Hintergrund zeichnen, sehen Sie den Effekt selbst.

Das Problem ist, dass Sie bemerken würden, dass der rechte Rand rot wäre, wenn Sie es einfach so machen. Höchstwahrscheinlich muss Adobe fortschrittliche Algorithmen verwenden, um diesen Effekt aufzuheben - möglicherweise durch Verstärken des Werts von Rot und Grün des 10. Pixels.

Das Hinzufügen von Transparenz zu einem bereits weit fortgeschrittenen Algorithmus ist wahrscheinlich etwas, das sie noch nicht gelöst haben, und daher deaktivieren sie einfach das Rendern von Subpixeln.

Ich glaube, dass dies der Fall ist, weil ich versucht habe, das Subpixel-Rendering auf diese naive Weise selbst zu implementieren, und diesen "farbigen Nebeneffekt" selbst gesehen habe.


Ja, der farbige Randeffekt ist definitiv da, Sie können ihn auch in den vergrößerten Screenshots oben sehen, und ich sehe nicht wirklich, wie er vermieden werden könnte. Ich denke, Subpixel-Rendering macht nur Sinn, wenn die gesamten Pixel bereits klein sind. Vielleicht hast du recht, dass es einfach zu kompliziert ist.
A. Donda

Ich glaube, sie sind zu kompliziert. Wenn nicht, wäre die Technologie solcher coolen Namen nicht würdig :)
frodeborli

Nur eine Anmerkung: Die Reihenfolge der Subpixel ist möglicherweise nicht immer RGB. Wenn wir uns die vom OP bereitgestellten Screenshots ansehen, scheint es BGR-geordnet zu sein: Subpixel an den linken Rändern sind rot, während Subpixel an den rechten Rändern blau sind.
Johan Boulé

0

Dies kann ein Fehler in Adobe sein, der besser in den Foren angesprochen wird.

Um die Anzeige von Schriftarten unter Linux zu verbessern, können Sie versuchen, Infinality zu verwenden:

Infinality ist eine Reihe von Freetype-Patches, die versuchen, ein verbessertes Font-Rendering für Linux bereitzustellen und eine einfache Anpassung zu ermöglichen, damit die Benutzer die Einstellungen nach ihrem Geschmack anpassen können. Mit ihm können Sie den Schriftstil einfach so einstellen, dass er OSX, OSX2, Windows 98, Windows XP oder Windows 7 emuliert, oder Sie können die Stile "Linux" oder "Infinality" (Standard) verwenden.

Sehen :

Besseres Rendern von Schriftarten unter Linux mit Unendlichkeit
archlinux Schriftkonfiguration - Unendlichkeit .


Ich schätze die Tipps und werde in Adobe-Foren nachfragen. Ich denke jedoch nicht, dass dies als Antwort qualifiziert ist.
A. Donda

Kein Problem. Soll ich das löschen?
Harryc

Nein, ich wollte nur erklären, warum ich nicht positiv gestimmt habe.
A. Donda

Leider scheint dies die einzige Antwort zu sein, die Sie erhalten.
Harrymc
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.