Frage

Ich möchte eine VGA -Farbe (256 Farben; 8 -Bit) in eine RGB -Farbe auf iOS konvertieren.

Ist es möglich, dies zu berechnen, oder muss ich Farbtabellen verwenden (mit CGColorSpacecreateindexed).

UIColor unterstützt keine 256 Farben.

Vielen Dank :)

War es hilfreich?

Lösung

Irgendwo hätte der Titel, den Sie portieren, die Palette setzen müssen. Auf der VGA werden die 256 Farben durch eine Tabelle abgebildet, die der Programmierer zuvor in eine 18 -Bit -RGB -Farbe (bei einem einheitlichen 6 Bit pro Kanal) umwandelt hat. Wenn Sie den Originaltitel über die Emulation ausführen, achten Sie nach Schreibvorgängen an Ports 0x3C6, 0x3c8 und 0x3c9 oder ruft über int 10h mit AX = 0x1010 (um eine einzelne Farbe einzustellen) oder 0x1012 (um einen Bereich festzulegen). Wenn Sie den Originalcode haben, suchen Sie offensichtlich nach der Quelle der Palette -Tabelle.

In den Zeichnungsbegriffen können Sie die Palette selbst als CGColorSpacecreateindexed wie Sie vorschlagen (Ignorieren Sie den leichten Dokumentationsfehler von Apple ignorieren Sie die Apple-Fehler, können Sie bis zu 256 Einträge ignorieren, beispielsweise als CGColorSpacecreateindexed, nicht bis zu 255 Einträge ignorieren, beispielsweise als CGColorSpacecreateindexed, nicht bis zu 255 ignorieren. ) Wahrscheinlich mit einem Bitmap -Kontext, um Ihren Puffer einfach an Corgraphics weiterzugeben und ihn zu vergessen.

Ich gehe davon aus, dass das Neuzuordnung an der CPU durchgeführt wird. Wenn dies also etwas zu teuer wird, sollten Sie GL es 2.x verwenden und einen geeigneten Pixel -Shader schreiben - Sie würden Ihr tatsächliches Bild wie beispielsweise eine Luminanz hochladen (dh. einzelne Kanal) Textur sowie eine 256x1 -Textur, bei der die Farbe an jedem Punkt ein Paletteneintrag ist, und schreiben Sie dann einen Shader, der aus der ersten Textur für die aktuellen Texturkoordinaten liest und diesen Wert verwendet, um die zweite zu indizieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top