Thêm một màu sắc cho mỗi màu sắc trong một hình ảnh


23

Bạn chỉ cần lấy hình ảnh này và làm cho mỗi màu được thêm một vào mỗi chữ số thập lục phân. Ví dụ: #49de5fsẽ trở thành #5aef60(với việc 9lặp thành một aflặp đến a 0.)

Màu # 49de5fMàu # 5aef60

Điều này cũng có nghĩa là tất cả các màu trắng ( #ffffff) sẽ trở thành màu đen ( #000000) bởi vì tất cả fcác vòng lặp trở lại 0, nhưng tất cả màu đen sẽ trở thành một màu đen nhạt hơn ( #111111).

Màu # 000000Màu # 111111

Ghi điểm dựa trên số byte ít nhất được sử dụng, vì đây là câu hỏi về .

Sử dụng hình ảnh dưới đây làm hình ảnh đầu vào cho mã của bạn và đặt hình ảnh đầu ra của mã vào câu trả lời của bạn.

Hình ảnh đầu vào

Nếu bạn muốn, bạn cũng có thể sử dụng hình ảnh cầu vồng khác này:

Một hình ảnh đầu vào tùy chọn khác


Những giả định nào chúng ta có thể đưa ra trên định dạng đầu vào / đầu ra, nếu chúng ta muốn sử dụng ngôn ngữ lập trình được thiết kế cho thiết kế phần cứng / FPGA?
Phục hồi Monica - -

@hexafraction Tôi nghĩ theo mặc định bạn có thể lấy dưới dạng tệp hoặc mã hex iirc.
Rɪᴋᴇʀ


5
@Peanut, sẽ rất tốt nếu có một trường hợp thử nghiệm bao gồm các efbyte (sẽ trở nên f0trái ngược với 00điều đó xảy ra khi bạn chỉ cần thêm 17 và dùng mod 256).
Martin Ender

2
Bạn nên đăng một hình ảnh cho đầu ra mẫu, thay vì chỉ cung cấp đầu vào mẫu. Ngoài ra, đây là một bài viết đầu tiên rất tốt đẹp! Chào mừng đến với trang web!
DJMcMayhem

Câu trả lời:


5

Pyke, 17 13 byte

.Fh16j%ijcjs 8{

Hãy thử nó ở đây!

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

Đưa đầu vào dưới dạng mảng số nguyên 3d pixel và đầu ra ở cùng định dạng

RAINBOWZ (Không có kỳ lân :()


Bạn có thể cung cấp hình ảnh đầu ra?
haykam

7

Toán học, 78 byte

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

Lấy và trả về một đối tượng hình ảnh (để tạo một đối tượng hình ảnh, chỉ cần dán hình ảnh vào Mathicala).

Kết quả cho trường hợp thử nghiệm:

nhập mô tả hình ảnh ở đây

Lấy đầu vàotrả lại đầu ra dưới dạng một mảng 3D của các giá trị kênh số nguyên, điều này giảm xuống còn 51 byte :

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

Nhưng những bài đăng meta đó chưa có số lượng hỗ trợ quá lớn, vì vậy bây giờ tôi sẽ sử dụng phiên bản 78 byte.


4

Verilog, 220 byte:

  • Các chương trình có thể lấy đầu vào là một mảng các giá trị pixel RGB có kích thước
  • Các chương trình có thể xuất qua một mảng các giá trị pixel RGB có kích thước

Hiện tại vẫn chưa rõ về cách cung cấp kích thước và nếu mảng được truyền phát hoặc cung cấp cùng một lúc. Tôi sẽ truyền phát 8 bit một lần bằng tín hiệu đồng hồ (với cờ dữ liệu hợp lệ xuống thấp sau khi toàn bộ hình ảnh được xử lý) và nhập / xuất kích thước dưới dạng số nguyên 32 bit:

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 byte

Bây giờ, nó hợp lệ!

Sử dụng thư viện Gối.

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

Đầu ra:Đầu ra

Cảm ơn @TuukkaX vì đã tiết kiệm 9 byte!
Cảm ơn @ mbomb007 vì đã lưu 18 byte!


Có cần thiết phải sử dụng 0xFFthay vì 255?
Yytsi

@TuukkaX Ái chà tôi đã không nhận thấy rằng cảm ơn bạn
Thiền vào

Có một cái nữa 0xFFtrong đó: D
Yytsi

Tôi nghĩ bạn có thể tiết kiệm nhiều byte hơn bằng cách nói from PIL import*. Tôi cũng nghĩ rằng Image.opencó thể thay đổi thành ngay opensau đó.
Yytsi

@TuukkaX Có, nó có thể được đổi thành from PIL import*, nhưng tôi không thể thay đổiImage.open
Thâp

1

APL Dyalog , 21 15 byte

Các chương trình có thể xuất ra dưới dạng ma trận các giá trị pixel RGB

Tôi giả sử đầu ra có thể ở cùng định dạng.

Giải pháp mới lấy ma trận các giá trị [[ r , g , b , r , g , b ], [ r , g , b , đấu

16⊥16|1+16 16⊤⎕

Giải trình

nhận đầu vào số
16 16⊤chuyển đổi thành cơ sở 2 chữ số 16
1+thêm 1, tức là 0 → 1, 1 → 2, 15 → 16
16|mô đun 16, tức là 16 → 0
16⊥chuyển đổi từ cơ sở 16

Thí dụ

      ⊢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

Giải pháp 21 byte cũ lấy ma trận của [["RRGGBB", "RRGGBB"], ["RRGGBB", Trần

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

Nhu cầu ⎕IO←0, được mặc định trên nhiều hệ thống.

Giải trình

{... cho mỗi RGB chuỗi 6 char, đại diện cho nó như là và làm:
n←⎕D,⎕Aassign "0 ... 9A ... Z" để n
⍵⍳⍨ tìm chỉ số của các nhân vật cá nhân trong n
1+ thêm một chỉ số, tức là 0 → 1, 1 → 2, 15 → 16
16|mô đun 16, tức là 16 → 0
n[... ]sử dụng đến chỉ số thành n

Thí dụ

      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 byte

Đây là mã (có hỗ trợ cho trường hợp thử nghiệm của Martin Ender (không có 60b)):

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

Và đây là phiên bản ít bị xáo trộn hơn:

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

Biên dịch và chạy với gcc -o color colorgolf.c && cat a.bmp | ./color > b.bmp

Mã này hỗ trợ hoạt động với bitmap . Để chuyển đổi pngtập tin sang bmp, tôi đã sử dụng lệnh sau:convert -flatten -alpha off png.png a.bmp

Mã giả định, bmptiêu đề đó dài 54 byte - trong trường hợp này nó hoạt động, nhưng tôi không chắc liệu tôi có kín đáo phá vỡ thứ gì đó không.

Ngoài ra, đây là cầu vồng:
Bây giờ có vẻ buồn ... :(


1

Java 142 byte

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

Chơi gôn

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

Trước hết chào mừng bạn đến với PPCG! Mã golf-code của bạn sử dụng icả tham số và trong vòng lặp for, vì vậy tôi sẽ thay đổi tham số thành một cái gì đó khác a. Ngoài ra, bạn có thể chơi golf thêm một số bằng cách loại bỏ int ở phía trước jvà thêm nó vào int i. Vì vậy, như thế này : 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;}. Ngoài ra, hãy xem bài viết này: Mẹo chơi golf trong Java . :)
Kevin Cruijssen

Bạn không thiết lập màu sắc chính xác. Bằng cách thêm 0x111111 vào các giá trị RGB, bạn có khả năng tràn từ một vị trí thập lục phân sang vị trí tiếp theo. Ví dụ: # 49de5f được cho là trở thành # 5aef60, không phải # 5aef70.
kamoroso94

0

R, 302 byte

Không hoàn hảo, nhưng ở đây đi:

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

Giải trình:

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

      }
   }
}

cầu vồng đẹp

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.