Wie interpretiert ein PenTile-Display-Controller seinen RGB-Framebuffer?

7

In einer PenTile-Anzeige ist die Zuordnung von Pixeln im Framebuffer zu einzelnen Subpixeln nicht trivial. Jedes Pixel im Framebuffer hat möglicherweise nur RG- und BG-Subpixel in einer interessanten geometrischen Anordnung.

Ich versuche, ein Subpixel-Antialiasing für Inhalte durchzuführen, die auf einem PenTile-Display angezeigt werden. Um die besten Ergebnisse zu erzielen, möchte ich verstehen, wie ich die Werte jedes Pixels im Framebuffer festlegen kann, um die Subpixel einzeln zu steuern. (Hinweis: Ich kenne das Subpixel-Layout der Anzeige, auf die ich ziele.)

Dan Hulme
quelle
Sie kennen die Details nicht, aber in PenTile werden Subpixel von Framebuffer-Pixeln gemeinsam genutzt, sodass Sie sie nicht einzeln steuern können. Beispiel: Wenn Sie 3x3 PenTile-Subpixel haben, werden diese 2x2 Framebuffer-Pixeln zugeordnet, und die Intensität des Subpixels wird durch die Überlappungs- und Framebuffer-RGB-Werte bestimmt. Dies ist jedoch nur eine Vermutung
JarkkoL
@ JarkkoL Das ist der Punkt meiner Frage. Ich weiß, dass die Subpixel gemeinsam genutzt werden, aber ich muss wissen, welche Funktion die Intensität jedes Subpixels bestimmt, damit ich vorhersagen kann, welche Ergebnisse mit bestimmten Framebuffer-Werten erzielt werden.
Dan Hulme
Ihre Frage deutete anders an, also die Klarstellung. Wenn Sie die native Auflösung im Vergleich zur Subpixel-Auflösung kennen, könnte dies eine Vorstellung von der Transformation geben
JarkkoL

Antworten:

6

Ich kann es nicht mit Sicherheit sagen, aber ich war selbst daran interessiert und habe versucht, es nachzuschlagen (mit wenig Erfolg). Ich habe jedoch die vielen Makrofotos analysiert, die Sie im Internet für diese Art von Anzeigen finden können.

RGB pixels      Pentile Subpixels (RGBG Layout)

--+---+--           --+---+--
X | X | X           G r G b G
--+---+--   -->     --+---+--
X | X | X           G b G r G
--+---+--           --+---+--

Soweit ich das beurteilen kann, scheinen die Positionen der grünen Subpixel genau mit den Positionen der Framebuffer-Pixel (X) übereinzustimmen, und die Intensität wird 1: 1 übertragen. Die roten und blauen Subpixel werden horizontal zwischen den beiden benachbarten Pixeln geteilt, und ihre Intensität scheint der Durchschnitt der rot / blauen Kanäle der beiden benachbarten Framebuffer-Pixel links und rechts zu sein, wodurch die horizontale Auflösung von R und B effektiv halbiert wird.

Diese Strategie scheint sich auf das Diamant-Pentile-Layout zu übertragen, obwohl die roten und blauen Subpixel um ein halbes Pixel nach unten (oder oben) verschoben sind:

RGB Pixels       Diamond Pentile subpixels
                         _________
X   X   X                G | G | G
              -->        __r___b__ 
X   X   X                G | G | G
                         __b___r__

Aufgrund der zusätzlichen vertikalen Verschiebung um ein halbes Pixel für Rot und Blau dieses Layouts, die beim Ansteuern der roten und blauen Subpixel nicht berücksichtigt wird, können Sie möglicherweise feststellen, dass eine horizontale Kante zwischen einem schwarzen und einem weißen Bereich möglicherweise grün erscheint oder Magenta. Sie können diesen Effekt in Makrofotos von Diamant-Pentile-Subpixel-Matrizen sehen, die Text rendern. Aber es gibt eigentlich keine konsequente Verschiebung. Auf einigen Fotos ist es abwärts und auf anderen aufwärts. Ich weiß nicht, ob die Displays anders hergestellt oder bei einigen Geräten nur verkehrt herum installiert wurden.

Ja, Sie können also problemlos alle Subpixel einer Pentile-Anzeige steuern. Jeder Farbkanalwert in Ihrem Bildpuffer wird genau einmal und nur für ein Pixel verwendet. Es ist nur so, dass für die roten und blauen Subpixel die roten und blauen Werte von zwei Bildpufferpixeln gemittelt werden.

Wenn Sie dies wissen, können Sie versuchen, ein komplexeres Subpixel-Rendering durchzuführen. Beachten Sie jedoch, dass Ihr typischer Farbraum wie sRGB nichtlinear ist. Die Filterung sollte in einem linearen Bereich erfolgen. Zum Beispiel hat ein Schachbrett mit abwechselndem 0 und 255 die gleiche Helligkeit wie ein flacher Bereich mit einem Wert um 185 (wenn ich mich richtig erinnere) anstelle von 128.

Abschließend möchte ich darauf hinweisen, dass es möglich ist, Anti-Alias-Filter für nicht rechteckige Abtastgitter zu entwickeln. Für dieses Schachbrett-Abtastgitter, das Sie für die roten und blauen Subpixel haben, hätte das ideale Tiefpassfilter beispielsweise ein Durchlassband in Form einer Rautenform im Spektralbereich. Wenn Sie versuchen würden, die Auflösung zu reduzieren, indem Sie jedes zweite Sample schachbrettartig ablegen, wären diese 5x5- und 3x3-Kernel vernünftige Anti-Alias-Filter, während die 5x5-Version mehr Details enthält:

 0   -1    0   -1    0
-1    0   10    0   -1              0  1  0
 0   10   32   10    0              1  4  1
-1    0   10    0   -1              0  1  0
 0   -1    0   -1    0

Diese können aufgrund der Positionen der Nullen direkt angewendet werden.

Möglicherweise möchten Sie auch eine Verschiebung um ein halbes Pixel für eine oder zwei Dimensionen einfügen, um die relative Positionierung der roten, blauen und grünen Subpixel zu berücksichtigen. Für das Diamant-Pentil-Layout möchten Sie möglicherweise einen der folgenden Filter verwenden:

  3    0    0    0    0    3
  0  -25    0    0  -25    0          -1   0   0  -1
  0    0  150  150    0    0           0   9   9   0
  0    0  150  150    0    0           0   9   9   0
  0  -25    0    0  -25    0          -1   0   0  -1
  3    0    0    0    0    3

um die richtigen rot / blauen Subpixel zu finden, anstatt nur vier Werte zu mitteln.

Das RGBG-Pentilmuster (ohne Diamant) würde nur eine horizontale Verschiebung um ein halbes Pixel erfordern, was zu einem Filter wie dem folgenden führen würde:

 -3   3   3  -3
  2  30  30   2
 -3   3   3  -3

Aufgrund der negativen Filterkoeffizienten muss beim Abschneiden vorsichtig vorgegangen werden. Sie können beispielsweise versuchen, den Rest auf die umgebenden Pixel zu verteilen, um die durchschnittliche Helligkeit beizubehalten.

sellibitze
quelle