Twoim zadaniem jest zrobienie zdjęcia sRGB 24 BPP i przesłanie tego samego obrazu w 3-krotnym powiększeniu do subpikseli czerwonych, zielonych i niebieskich. Powstały obraz zostanie w całości wykonany z czystych czarnych, czerwonych, zielonych i niebieskich pikseli.
Każdy piksel z obrazu źródłowego po powiększeniu tworzy układ 9 subpikseli, które można włączyć lub wyłączyć (tj. Ich odpowiedni kolor lub czerń). Konkretne ustawienie wykorzystuje trzy kolumny: czerwony, zielony i niebieski, w tej kolejności, w następujący sposób:
(Pamiętaj, że obramowania tych „pikseli” służą wyłącznie do celów demonstracyjnych).
Ponieważ każdy z dziewięciu subpikseli może być włączony lub wyłączony, będziesz musiał skwantyzować obraz wejściowy i użyć różnych wzorów subpikseli, aby osiągnąć 3 poziomy jasności.
Dla każdego podpiksela na obrazie:
- W przypadku poziomów kolorów 0–74 wszystkie subpiksele powinny być czarne.
- Dla poziomów koloru 75-134 środkowy podpiksel powinien mieć odpowiedni kolor, a pozostałe dwa powinny być czarne.
- Dla poziomów koloru 135-179 środkowy podpiksel powinien być czarny, a pozostałe dwa powinny mieć odpowiedni kolor
- Dla poziomów kolorów 180–255 wszystkie trzy subpiksele powinny mieć odpowiedni kolor
Wybrałem te zakresy poziomów, ponieważ wyglądały dobrze
Zastosuj tę transformację do każdego piksela w obrazie i wyślij obraz w powiększeniu subpikseli.
Przykłady pojedynczych pikseli
rgb (40, 130, 175) wygeneruje ten wzór:
rgb (160, 240, 100) wygeneruje ten wzór:
Przykłady pełnego obrazu
Obrazy pochodzą z Wikipedii
Zasady i notatki
- Dane wejściowe i wyjściowe mogą być w dowolnym dogodnym formacie, niezależnie od tego, czy są to rzeczywiste pliki obrazów, czy (ewentualnie zagnieżdżone) listy wartości RGB.
- Możesz założyć, że piksele znajdują się w przestrzeni kolorów sRGB z 24BPP.
Miłej gry w golfa!
źródło
Odpowiedzi:
JavaScript (Node, Chrome, Firefox), 111 bajtów
Format I / O: macierz
[R,G,B]
wartości.Wypróbuj online! (tylko jeden piksel)
W jaki sposób?
Wszystkie wartości progowe są wielokrotności 15. Zamiast przeprowadzać jawne testy porównawcze, testowanie maski bitowej, w której każdy bit reprezentuje przedział 15 wartości, jest nieco krótszy (z wyjątkiem najbardziej znaczącego bitu, który jest odwzorowany na pojedynczą wartość).
Kodujemy off jako1 i na jak0 w celu maksymalizacji liczby zer wiodących.
Otrzymujemy:
000000000111111111
dla górnych i dolnych pikseli (000000111000011111
dla środkowego piksela (Skomentował
Przykład
Poniższy fragment kodu przetwarza nagłówek Mona Lisa (64x64). Nie działa na Edge.
Pokaż fragment kodu
źródło
Galaretka , 27 bajtów
Monadyczny link akceptujący listę (obraz) list (wierszy) list (pikseli). Każdy piksel ma trzy liczby całkowite[ 0 , 255 ] ,
[r, g, b]
co daje wynik w tym samym formacie.Wypróbuj online! W tym przykładzie wykonano zdjęcie dwa na dwa, w którym lewy górny piksel to pierwszy przykładowy piksel, prawy górny piksel to drugi przykładowy piksel, dolny lewy piksel to czarny piksel, a dolny prawy piksel to biały piksel.
W jaki sposób?
źródło
3⁼þ¤
wykonuje zewnętrzny iloczyn[1,2,3]=[1,2,3]
uzyskując[[1=1,2=1,3=1],[2=1,2=2,2=3],[3=1,3=2,3=3]]
co[[1,0,0],[0,1,0],[0,0,1]]
.Wolfram Language (Mathematica) , 186 bajtów
Dane wejściowe i wyjściowe są listami wartości RGB
Wypróbuj online!
Wolfram Language (Mathematica), 243 bajty
ten drugi kod jest funkcją, która pobiera jako obraz wejściowy i wyprowadza obraz
(nie wiem, dlaczego ludzie byli zdezorientowani w komentarzach)
Więc jeśli nakarmisz to img
do tej funkcji
dostaniesz ten wynik
źródło
i
to obraz.C # (interaktywny kompilator Visual C #) , 157 bajtów
Drukuje RGB wyniku. Wyjście jest oddzielone znakiem nowej linii i nie jest wyrównane. Początkowo używałem maski bitowej do włączania
1
i0
wyłączania, ale potem zobaczyłem odpowiedź Arnaulda i zdałem sobie sprawę, że użycie włączania0
i1
wyłączania może zaoszczędzić bajty w liczbie. Łącze TIO zawiera przykładowy „obraz” o wymiarach 4 na 2 piksele.Wypróbuj online!
źródło
APL + WIN, 102 bajty
Monituje o matrycę 2d pikseli jako 24-bitowe liczby całkowite, tak jak wyglądałyby na obrazie
Wypróbuj online! Dzięki uprzejmości Dyalog Classic
Wysyła 2d macierz 24-bitowych liczb całkowitych transformowanego obrazu. Większość kodu obsługuje formatowanie danych wejściowych i wyjściowych.
Przykład: Zrób zdjęcie 2 x 2 złożone z przykładowych pikseli
Wejście:
Wynik:.
źródło
Rdza - 281 bajtów
Ta linia jest funkcją, która spełnia to wyzwanie, jednak jej dane wejściowe to w rzeczywistości dane w formacie pliku TGA, jak opisano na paulbourke.net , wraz ze wstępnie przeanalizowaną szerokością i wysokością obrazu (w pikselach). Zwraca dane pikselowe dla danych wyjściowych jako bajty w wektorze 9 razy większym niż rozmiar danych wejściowych w pikselach.
Ten drugi wiersz jest funkcją main (), która może przekształcić plik wejściowy o nazwie i.tga w plik wyjściowy o nazwie o.tga, wywołując funkcję z z pierwszego wiersza, bez użycia zewnętrznych bibliotek. Obsługuje parsowanie szerokości / wysokości, tworzenie nagłówka dla pliku wyjściowego oraz odczyt i zapis pliku. Dodałby 402 bajtów, gdyby wyzwanie wymagało We / Wy pliku, w sumie 683. Jest to przydatne do testowania.
źródło