“添加一个”到图像中的每种颜色


23

您只需拍摄此图像,然后将每种颜色加到每个十六进制数字上即可。例如,#49de5f将变为#5aef60(通过9循环到af循环到0。)

颜色#49de5f颜色#5aef60

这也意味着所有白色(#ffffff)将变为黑色(#000000),因为所有f循环都返回0,但是所有黑色将变为黑色(#111111)的浅色阴影。

颜色#000000颜色#111111

评分基于使用的最少字节数,因为这是一个问题。

使用下面的图像作为代码的输入图像,并将代码的输出图像放入答案中。

输入图像

如果需要,您还可以使用其他彩虹图像:

另一个可选的输入图像


如果我们想使用为硬件/ FPGA设计而设计的编程语言,我们可以对输入/输出格式做出什么假设?
恢复莫妮卡-ζ-16年

@hexafraction我认为默认情况下,您可以将其作为文件或十六进制代码iirc。
Rɪᴋᴇʀ


5
@Peanut,最好有一个包含ef字节的测试用例(与您仅添加17并采用mod 256时发生的情况f0相反00)。
马丁·恩德

2
您应该发布图像以用于示例输出,而不只是提供示例输入。除此之外,这是一篇非常不错的第一篇文章!欢迎光临本站!
DJMcMayhem

Answers:


5

Pyke,17 13字节

.Fh16j%ijcjs 8{

在这里尝试!

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

将输入作为像素的3d整数数组,并以相同格式输出

彩虹(没有独角兽:()


可以提供输出图像吗?
haykam

7

Mathematica,78个字节

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

获取并返回一个图像对象(要创建图像对象,只需将图像粘贴到Mathematica中)。

测试用例的结果:

在此处输入图片说明

将输入输出作为整数通道值的3D数组,这减少到51个字节

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

但是这些meta帖子还没有获得压倒性的支持,因此我现在使用78字节的版本。


4

Verilog,220个字节:

  • 程序可以将输入作为具有尺寸的RGB像素值数组
  • 程序可以通过具有尺寸的RGB像素值数组输出

目前尚不清楚如何提供尺寸以及是否要流式传输或一次全部提供数组。我将使用时钟信号(在处理完整个图像后有效数据标志变低)一次将其流化为8位,并将尺寸输入/输出为32位整数:

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个字节

现在,它有效了!

使用枕头库。

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()

输出:输出量

感谢@TuukkaX节省了9个字节!
感谢@ mbomb007节省了18个字节!


有必要使用0xFF代替255吗?
Yytsi

@TuukkaX糟糕,我没有注意到您的感谢
TuxCrafting

还有一个0xFF在那里:d
Yytsi

我认为您可以节省更多字节from PIL import*。我也认为Image.open可以更改为此open之后。
Yytsi'6

@TuukkaX是的,它可以更改为from PIL import*,但我不能更改Image.open
TuxCrafting

1

Dyalog APL21 15 字节

程序可以输出为RGB像素值的矩阵

我假设输出的格式可能相同。

新解决方案采用值[[ rgbrgb ],[ rgb,…的矩阵

16⊥16|1+16 16⊤⎕

说明

将数值输入
16 16⊤转换为2位数的基数16
1+加1,即0→1,1→2,15→16
16|模数16,即16→0
16⊥从基数16转换

      ⊢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

旧的21字节解决方案采用[[“” RRGGBB“,” RRGGBB“],[” RRGGBB“,…的矩阵

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

Needs ⎕IO←0,这是许多系统上的默认设置。

说明

{... 每个RGB 6炭串,其表示为与做:
n←⎕D,⎕A分配“0 ... 9A ... Z”到Ñ
⍵⍳⍨找到的单个字符的索引在Ñ
1+添加一个索引,即0→1,1→2,15→ 16
16|模16,即16→0
n[]用它来索引n

      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

Ç - 114 113 70 66 61个 72个 67字节

这是代码(支持Martin Ender的测试用例(不含60b)):

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

这是不太混淆的版本:

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 ) ); 
}

编译并运行 gcc -o color colorgolf.c && cat a.bmp | ./color > b.bmp

此代码支持与位图一起使用。要将png文件转换为bmp,我使用了以下命令:convert -flatten -alpha off png.png a.bmp

代码假定该bmp标头长54个字节-在这种情况下它可以工作,但是我不确定是否没有谨慎破坏某些内容。

另外,这是彩虹:
现在看起来很难过... :(


1

Java 142字节

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;
}

打高尔夫球:

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;}

首先欢迎来到PPCG!您的代码查询代码在i参数和for循环中都使用了参数,因此我会将参数更改为a。另外,您可以通过移走int 前面的j并将其添加到中来进一步打高尔夫球int i。所以,像这样: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;}。另外,请看一下这篇文章:Java高尔夫技巧。:)
凯文·克鲁伊森

您没有正确设置颜色。通过将0x111111添加到RGB值,您就有可能从一个十六进制位置溢出到另一个十六进制位置。例如,#49de5f应该成为#5aef60,而不是#5aef70。
kamoroso94 '16

0

R,302字节

远非完美,但这里有:

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))}}}

说明:

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))

      }
   }
}

美丽的彩虹

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.