"Adicionar um" a todas as cores da imagem


23

Você simplesmente pegaria essa imagem e acrescentaria uma cor a cada dígito hexadecimal. Por exemplo, #49de5fse tornaria #5aef60(com o 9loop para um ae o floop para um 0.)

Cor # 49de5fCor # 5aef60

Isso também significa que todo branco ( #ffffff) se tornará preto ( #000000) porque todos os floops retornam a 0, mas todo preto se tornará um tom mais claro de preto ( #111111).

Cor # 000000Cor # 111111

A pontuação é baseada no menor número de bytes usados, pois esta é uma questão de .

Use a imagem abaixo como imagem de entrada para o seu código e coloque a imagem de saída do seu código na sua resposta.

Imagem de entrada

Se você quiser, também pode usar esta outra imagem do arco-íris:

Outra imagem de entrada opcional


Que suposições podemos fazer no formato de entrada / saída, se quisermos usar uma linguagem de programação projetada para o design de hardware / FPGA?
Reinstate Monica - ζ--

@hexafraction Eu acho que por padrão você pode usar como arquivo ou como código hexadecimal iirc.
Rɪᴋᴇʀ


5
@ Amendoim, seria bom ter um caso de teste que inclui efbytes (que deve se tornar f0o contrário do 00que acontece quando você adiciona 17 e usa o mod 256).
Martin Ender

2
Você deve postar uma imagem para saída de amostra, em vez de apenas fornecer entrada de amostra. Fora isso, este é um ótimo primeiro post! Bem vindo ao site!
DJMcMayhem

Respostas:


5

Pyke, 17 13 bytes

.Fh16j%ijcjs 8{

Experimente aqui!

.F            - for i in deep_for(input):
  h16%        -    (i+1)%16
          +   -   ^+V
      i16+    -    (i+16)
           8{ -  unset_bit(8, ^)

Recebe a entrada como uma matriz inteira 3d de pixels e gera o mesmo formato

RAINBOWZ (sem unicórnio :()


Você pode fornecer a imagem de saída?
haykam

7

Mathematica, 78 bytes

Image@Apply[16#+#2&,Mod[IntegerDigits[#~ImageData~"Byte",16,2]+1,16]/255,{3}]&

Pega e retorna um objeto de imagem (para criar um objeto de imagem, basta colar a imagem no Mathematica).

Resultado para o caso de teste:

insira a descrição da imagem aqui

Tomando a entrada e retornando a saída como uma matriz 3D de valores de canal inteiro, isso reduz para 51 bytes :

Apply[16#+#2&,Mod[IntegerDigits[#,16,2]+1,16],{3}]&

Mas essas meta postagens ainda não têm uma quantidade impressionante de suporte, então vou usar a versão de 78 bytes por enquanto.


4

Verilog, 220 bytes:

  • Os programas podem receber entrada como uma matriz de valores de pixels RGB com dimensões
  • Os programas podem produzir através de uma matriz de valores de pixels RGB com dimensões

Atualmente, não está claro como as dimensões devem ser fornecidas e se a matriz deve ser transmitida ou fornecida ao mesmo tempo. Vou transmiti-lo 8 bits por vez usando um sinal de relógio (com um sinalizador de dados válidos que fica baixo após o processamento de toda a imagem) e inserir / enviar as dimensões como números inteiros de 32 bits:

module a(input[31:0]w,input[31:0]h,input[7:0]d,input c,output[31:0]W,output[31:0]H,output reg[7:0]D,output reg v=0);assign W=w;assign H=h;reg[65:0]p=1;always@(posedge c) begin v<=(p<3*w*h); p<=p+v; D<=d+17; end endmodule

4

Python, 226 bytes

Agora é válido!

Use a biblioteca de travesseiros.

from PIL import Image
m=Image.open(input()).convert("RGB")
for y in range(m.size[1]):
 for x in range(m.size[0]):
    t=m.getpixel((x,y))
    h=t[0]+(t[1]<<8)+(t[2]<<16)+1118481
    m.putpixel((x,y),(h&255,h>>8&255,h>>16&255))
m.show()

Saída:Saída

Obrigado a @TuukkaX por salvar 9 bytes!
Obrigado a @ mbomb007 por salvar 18 bytes!


É necessário usar em 0xFFvez de 255?
Yytsi

@TuukkaX Woops eu não notei isso obrigado
TuxCrafting

Há mais um 0xFF: D
Yytsi

Eu acho que você pode salvar mais bytes dizendo from PIL import*. Eu também acho que isso Image.openpode ser alterado para logo opendepois disso.
Yytsi

@TuukkaX Sim, pode ser alterado para from PIL import*, mas não consigo alterar o #Image.open
TuxCrafting

1

Dyalog APL , 21 15 bytes

Os programas podem ser exibidos como uma matriz de valores de pixels RGB

Presumo que a saída possa estar no mesmo formato.

Nova solução leva matriz de valores [[ r , g , b , r , g , b ], [ r , g , b ,…

16⊥16|1+16 16⊤⎕

Explicação

obter entrada numérica
16 16⊤converter para a base de 2 dígitos 16
1+adicionar 1, ie 0 → 1, 1 → 2, 15 → 16
16|módulo 16, ie 16 → 0
16⊥ converter da base 16

Exemplo

      ⊢m←2 6⍴90 239 96 255 255 255 0 0 0 239 239 239
90 239 96 255 255 255
 0   0  0 239 239 239
      16⊥16|1+⎕⊤⍨2/16
⎕:
      m
107 240 113   0   0   0
 17  17  17 240 240 240

A solução antiga de 21 bytes utiliza matriz de [["RRGGBB", "RRGGBB"], ["RRGGBB",…

{n[16|1+⍵⍳⍨n←⎕D,⎕A]}¨

Necessidades ⎕IO←0 , que é padrão em muitos sistemas.

Explicação

{Para cada sequência de caracteres de 6 caracteres RGB, represente-a como e faça:
n←⎕D,⎕Aatribua "0… 9A… Z" para n
⍵⍳⍨ encontrar índices dos caracteres individuais em n e
1+ adicionar um ao índice, ou seja, 0 → 1, 1 → 2, 15 → 16
16|módulo 16, ou seja, 16 → 0
n[]use isso para indexar em n

Exemplo

      f←{n[16|1+⍵⍳⍨n←⎕D,⎕A]}¨ 
      ⊢p←2 2⍴'5AEF60' 'FFFFFF' '000000' 'EFEFEF'
┌──────┬──────┐
│5AEF60│FFFFFF│
├──────┼──────┤
│000000│EFEFEF│
└──────┴──────┘
      f p           
┌──────┬──────┐
│6BF071│000000│
├──────┼──────┤
│111111│F0F0F0│
└──────┴──────┘

1

C - 114 113 70 66 61 72 67 bytes

Aqui está o código (com suporte para o caso de teste de Martin Ender (sem o 60b)):

main(c,b){for(;~(b=getchar());putchar(c++<54?b:b+16&240|b+1&15));}

E aqui está a versão menos ofuscada:

main( c, b ) //Defaults to int
{
    //Get characters until EOF occurs
    //Copy first 54 bytes of header, later add 1 to each hexadecimal digit
    for ( ; ~( b = getchar( ) ); putchar( c++ < 54 ? b: b + 16 & 240 | b + 1 & 15 ) ); 
}

Compile e execute com gcc -o color colorgolf.c && cat a.bmp | ./color > b.bmp

Este código suporta trabalhos com bitmaps . Para converter pngarquivos bmp, usei o seguinte comando:convert -flatten -alpha off png.png a.bmp

O código pressupõe que esse bmpcabeçalho tenha 54 bytes de comprimento - nesse caso, ele funciona, mas não tenho certeza se não estou quebrando algo discretamente.

Além disso, este é o arco-íris:
Parece triste agora ... :(


1

Java 142 bytes

public BufferedImage translateColor(BufferedImage image){
  for(int i=-1;++i<image.getWidth();)
    for(int j=-1;++<image.getHeight();)
      image.setRGB(i,j,image.getRGB(i,j)+1118481);
  return image;
}

Golfe:

BufferedImage t(BufferedImage i){for(int x=-1;++x<i.getWidth();)for(int y=-1;++y<i.getHeight();)i.setRGB(x,y,i.getRGB(x,y)+1118481);return i;}

Antes de tudo, seja bem-vindo ao PPCG! Seu código de código de golfe usa os idois como parâmetro e no loop for, então eu alteraria o parâmetro para outra coisa parecida a. Além disso, você pode jogar um pouco mais removendo o int na frente do je adicioná-lo ao int i. Assim como este: BufferedImage t(BufferedImage a){for(int i=-1,j;++i<a.getWidth();)for(j=-1;++j<a.getHeight();)a.setRGB(i,j,a.getRGB(i,j)+1118481);return a;}. Além disso, dê uma olhada neste post: Dicas para jogar golfe em Java . :)
Kevin Cruijssen

Você não está definindo as cores corretamente. Ao adicionar 0x111111 aos valores RGB, você pode transbordar de um local hexadecimal para o próximo. Por exemplo, # 49de5f deve se tornar # 5aef60, não # 5aef70.
Kantoso94

0

R, 302 bytes

Longe de ser perfeito, mas aqui vai:

a<-as.raster(imager::load.image(file.choose()));l=letters;n=as.numeric;d=a;f=function(x){if(suppressWarnings(is.na(n(x)))){if(x=="F")"0" else{l[match(x,toupper(l))+1]}}else{if(x==9)"A" else as.character(n(x)+1)}};for(o in 1:90){for(g in 1:200){for(h in 2:7){substr(d[o,g],h,h)<-f(substr(a[o,g],h,h))}}}

Explicação:

a<-as.raster(imager::load.image(file.choose()));  //chooses file
l=letters;n=as.numeric;d=a;                      //shortens some names and creates
                                                   duplicate variable to modify

f=function(x){                                //creates a function that takes in a
   if(suppressWarnings(is.na(n(x)))){            character type and checks whether it is
      if(x=="F")"0"                              a number or letter.
      else{l[match(x,toupper(l))+1]}}            Returns the converted letter or number.                               
   else{                                   
      if(x==9)"A"                         
      else as.character(n(x)+1)}         
};                                      

for(o in 1:90){                       //loops through every single hex digit and applies
   for(g in 1:200){                     the converting function, modifying the duplicate
      for(h in 2:7){                    variable. Now you have 2 images =D

         substr(d[o,g],h,h)<-f(substr(a[o,g],h,h))

      }
   }
}

um lindo arco-íris

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.