Ihre Aufgabe ist es, ein 24-BPP-sRGB-Bild aufzunehmen und dasselbe Bild 3x in rote, grüne und blaue Subpixel hochskaliert auszugeben. Das resultierende Bild besteht vollständig aus reinen schwarzen, roten, grünen und blauen Pixeln.
Jedes Pixel aus dem Quellbild erzeugt beim Zoomen eine Anordnung von 9 Subpixeln, die entweder ein- oder ausgeschaltet sein können (dh ihre jeweilige Farbe oder Schwarz). Die spezifische Anordnung verwendet drei Spalten von Rot, Grün und Blau in dieser Reihenfolge wie folgt:
(Beachten Sie, dass die Ränder dieser "Pixel" nur zur Demonstration dienen.)
Da jedes der neun Subpixel nur ein- oder ausgeschaltet sein kann, müssen Sie das Eingabebild quantisieren und verschiedene Subpixelmuster verwenden, um 3 Helligkeitsstufen zu erzielen.
Für jedes Subpixel im Bild:
- Für die Farbstufen 0-74 sollten alle Subpixel schwarz sein.
- Für die Farbstufen 75-134 sollte das mittlere Subpixel die jeweilige Farbe und die anderen beiden schwarz sein.
- Für die Farbstufen 135-179 sollte das mittlere Subpixel schwarz sein und die anderen beiden sollten die jeweilige Farbe haben
- Für die Farbstufen 180-255 sollten alle drei Subpixel ihre jeweilige Farbe haben
Ich habe diese Levelbereiche gewählt, weil diese zufällig gut aussehen
Wenden Sie diese Transformation auf jedes Pixel im Bild an und geben Sie das subpixel-hochskalierte Bild aus.
Einzelpixel-Beispiele
rgb (40, 130, 175) erzeugt dieses Muster:
rgb (160, 240, 100) erzeugt dieses Muster:
Beispiele für Vollbilder
Bilder aus Wikipedia
Regeln und Notizen
- Die Eingabe und Ausgabe kann in einem beliebigen Format erfolgen, unabhängig davon, ob es sich um tatsächliche Bilddateien oder (möglicherweise verschachtelte) Listen mit RGB-Werten handelt.
- Sie können davon ausgehen, dass sich die Pixel mit 24BPP im sRGB-Farbraum befinden.
Viel Spaß beim Golfen!
quelle
Antworten:
JavaScript (Node, Chrome, Firefox), 111 Byte
E / A-Format: Wertematrix
[R,G,B]
.Probieren Sie es online aus! (nur ein einziges Pixel)
Wie?
Alle Schwellenwerte sind Vielfache von 15. Anstatt explizite Vergleichstests durchzuführen, ist es etwas kürzer, eine Bitmaske zu testen, bei der jedes Bit ein Intervall von 15 Werten darstellt (mit Ausnahme des höchstwertigen Bits, das einem einzelnen Wert zugeordnet ist).
Wir bekommen:
000000000111111111
000000111000011111
Kommentiert
Beispiel
Das folgende Code-Snippet verarbeitet den Kopf von Mona Lisa (64x64). Funktioniert nicht mit Edge.
Code-Snippet anzeigen
quelle
Gelee , 27 Bytes
[r, g, b]
Probieren Sie es online aus! In diesem Beispiel wird ein Zwei-mal-Zwei-Bild aufgenommen, wobei das obere linke Pixel das erste Beispielpixel ist, das obere rechte Pixel das zweite Beispielpixel ist, das untere linke Pixel ein schwarzes Pixel ist und das untere rechte Pixel ein weißes Pixel ist Pixel.
Wie?
quelle
3⁼þ¤
führt ein äußeres Produkt des[1,2,3]=[1,2,3]
Nachgebens aus,[[1=1,2=1,3=1],[2=1,2=2,2=3],[3=1,3=2,3=3]]
das ist[[1,0,0],[0,1,0],[0,0,1]]
.Wolfram Language (Mathematica) , 186 Bytes
Eingabe und Ausgabe sind Listen von RGB-Werten
Probieren Sie es online aus!
Wolfram Language (Mathematica), 243 Bytes
Dieser zweite Code ist eine Funktion , die einen als Eingabe Bild und gibt ein Bild
(ich weiß nicht , warum die Leute in den Kommentaren waren verwirrt)
Also, wenn Sie dieses Bild füttern
in diese Funktion
Sie erhalten diese Ausgabe
quelle
i
ist ein Bild.C # (Visual C # Interactive Compiler) , 157 Byte
Druckt das RGB der Ausgabe. Die Ausgabe ist durch Zeilenumbrüche getrennt und nicht ausgerichtet. Ursprünglich benutzte ich eine Bitmaske, um ein-
1
und0
auszuschalten, aber dann sah ich Arnauld's Antwort, und mir wurde klar, dass die Verwendung0
von Ein und1
Aus Bytes in der Zahl sparen könnte. Die TIO-Verbindung enthält ein 4 "x 2 Pixel großes Beispiel" Bild ".Probieren Sie es online aus!
quelle
APL + WIN, 102 Bytes
Fordert eine 2D-Matrix von Pixeln als 24-Bit-Ganzzahlen auf, wie sie im Bild erscheinen würden
Probieren Sie es online aus! Mit freundlicher Genehmigung von Dyalog Classic
Gibt eine 2d-Matrix mit 24-Bit-Ganzzahlen des transformierten Bildes aus. Der größte Teil des Codes übernimmt die Formatierung der Ein- und Ausgabe.
Beispiel: Nehmen Sie ein 2 x 2-Bild auf, das aus den Beispielpixeln besteht
Eingang:
Ausgabe:.
quelle
Rost - 281 Bytes
Diese Zeile ist eine Funktion, die der Herausforderung gerecht wird. Bei der Eingabe handelt es sich jedoch tatsächlich um Daten im TGA-Dateiformat, wie auf paulbourke.net beschrieben , sowie um eine vorab analysierte Breite und Höhe des Bilds in Pixel. Es gibt Pixeldaten für die Ausgabe als Bytes in einem Vektor zurück, der neunmal so groß ist wie die eingegebenen Pixeldaten.
Diese zweite Zeile ist eine main () -Funktion, die eine Eingabedatei mit dem Namen i.tga in eine Ausgabedatei mit dem Namen o.tga umwandeln kann, indem die Funktion z aus der ersten Zeile aufgerufen wird, ohne externe Bibliotheken zu verwenden. Es behandelt das Parsen von Breite / Höhe, das Erstellen eines Headers für die Ausgabedatei und das Lesen und Schreiben von Dateien. Es würde 402 Bytes hinzufügen, wenn die Herausforderung Datei-E / A für insgesamt 683 erfordert. Es ist nützlich zum Testen.
quelle