Sua tarefa é obter uma imagem sRGB de 24 BPP e gerar a mesma imagem ampliada em 3x em subpixels vermelho, verde e azul. A imagem resultante será composta inteiramente de pixels pretos, vermelhos, verdes e azuis.
Cada pixel da imagem de origem, quando ampliado, produz um arranjo de 9 subpixels que podem ser ativados ou desativados (ou seja, suas respectivas cores ou preto). O arranjo específico usa três colunas de vermelho, verde e azul, nessa ordem, da seguinte maneira:
(Observe que as bordas desses "pixels" são apenas para demonstração.)
Como cada um dos nove subpixels só pode ser ativado ou desativado, você precisará quantizar a imagem de entrada e usar diferentes padrões de subpixel para alcançar 3 níveis de brilho.
Para cada subpixel na imagem:
- Para os níveis de cor de 0 a 74, todos os subpixels devem ser pretos.
- Para os níveis de cor 75-134, o subpixel do meio deve ser a cor respectiva e os outros dois devem ser pretos.
- Para os níveis de cor 135-179, o subpixel do meio deve ser preto e os outros dois devem ter a respectiva cor
- Para os níveis de cor 180-255, todos os três subpixels devem ter suas respectivas cores
Eu escolhi esses intervalos de nível porque foi isso que aconteceu com uma boa aparência
Aplique essa transformação a todos os pixels da imagem e produza a imagem com sub-pixel.
Exemplos de pixel único
rgb (40, 130, 175) produzirá este padrão:
rgb (160, 240, 100) produzirá este padrão:
Exemplos de imagem completa
Imagens originárias da Wikipedia
Regras e notas
- A entrada e a saída podem estar em qualquer formato conveniente, sejam arquivos de imagem reais ou (possivelmente aninhadas) listas de valores RGB.
- Você pode assumir que os pixels estão no espaço de cores sRGB com 24BPP.
Feliz golfe!
fonte
Respostas:
JavaScript (Nó, Chrome, Firefox), 111 bytes
Formato de E / S: matriz de
[R,G,B]
valores.Experimente online! (apenas um pixel)
Como?
Todos os valores limite são múltiplos de 15. Em vez de fazer testes de comparação explícitos, é um pouco mais curto testar uma máscara de bits em que cada bit representa um intervalo de 15 valores (exceto o bit mais significativo que é mapeado para um único valor).
Nós temos:
000000000111111111
000000111000011111
Comentado
Exemplo
O seguinte trecho de código processa a cabeça da Mona Lisa (64x64). Não funciona no Edge.
Mostrar snippet de código
fonte
Gelatina , 27 bytes
[r, g, b]
Experimente online! Este exemplo está tirando uma imagem dois por dois, onde o pixel superior esquerdo é o primeiro exemplo de pixel, o pixel superior direito é o segundo exemplo de pixel, o pixel inferior esquerdo é um pixel preto e o pixel inferior direito é um branco pixel.
Como?
fonte
3⁼þ¤
executa um produto externo de[1,2,3]=[1,2,3]
produção[[1=1,2=1,3=1],[2=1,2=2,2=3],[3=1,3=2,3=3]]
que é[[1,0,0],[0,1,0],[0,0,1]]
.Wolfram Language (Mathematica) , 186 bytes
Entrada e Saída são listas de valores RGB
Experimente online!
Wolfram Language (Mathematica), 243 bytes
esse segundo código é uma função que recebe como entrada uma imagem e gera uma imagem
(não sei por que as pessoas ficaram confusas nos comentários)
Então, se você alimentar esse img
nessa função
você obterá essa saída
fonte
i
é uma imagem.C # (compilador interativo do Visual C #) , 157 bytes
Imprime o RGB da saída. A saída é nova linha separada e não alinhada. Originalmente, eu usava uma máscara de bits quando
1
estava ligado e0
desligado, mas então vi a resposta de Arnauld e percebi que usar0
como ligado e1
desligado poderia salvar bytes no número. O link TIO contém uma "imagem" de amostra de 4 por 2 pixels.Experimente online!
fonte
APL + WIN, 102 bytes
Solicita uma matriz 2D de pixels como números inteiros de 24 bits, como apareceriam na imagem
Experimente online! Cortesia de Dyalog Classic
Produz uma matriz 2D de números inteiros de 24 bits da imagem transformada. A maior parte do código está lidando com a formatação da entrada e saída.
Exemplo: Tire uma imagem 2 x 2 composta pelos pixels de amostra
Entrada:
Resultado:.
fonte
Ferrugem - 281 bytes
Essa linha é uma função que atende ao desafio, no entanto, sua entrada é realmente dados no formato de arquivo TGA, conforme descrito em paulbourke.net , juntamente com largura e altura pré-analisadas, em pixels, da imagem. Retorna dados de pixel para a saída, como bytes, em um vetor 9 vezes o tamanho dos dados de pixel de entrada.
Essa segunda linha é uma função main () que pode transformar um arquivo de entrada chamado i.tga em um arquivo de saída chamado o.tga, chamando a função z da primeira linha, sem usar bibliotecas externas. Ele lida com a análise de largura / altura, criando um cabeçalho para o arquivo de saída e lendo + gravando. Seria adicionar 402 bytes se o desafio exigisse E / S de arquivo, para um total de 683. É útil para teste.
fonte