«Добавить один» к каждому цвету изображения


23

Вы просто взяли бы это изображение и добавили бы каждый цвет по одному к каждой шестнадцатеричной цифре. Например, #49de5fстанет #5aef609циклом в aи fциклом в 0.)

Цвет # 49de5fЦвет # 5aef60

Это также означало бы, что все white ( #ffffff) станут черными ( #000000), потому что все fциклы вернутся назад 0, но весь черный станет более светлым оттенком черного ( #111111).

Цвет # 000000Цвет # 111111

Оценка основана на наименьшем количестве используемых байтов, так как это вопрос .

Используйте приведенное ниже изображение в качестве входного изображения для своего кода и поместите выходное изображение своего кода в свой ответ.

Входное изображение

Если вы хотите, вы также можете использовать это другое изображение радуги:

Еще одно дополнительное входное изображение


Какие предположения мы можем сделать для формата ввода / вывода, если мы хотим использовать язык программирования, разработанный для аппаратного / FPGA проектирования?
Восстановить Монику - ζ--

@hexafraction Я думаю, что по умолчанию вы можете взять в виде файла или в виде шестнадцатеричного кода IIRC.
Rɪᴋᴇʀ


5
@Peanut, было бы хорошо иметь тестовый пример, включающий efбайты (который должен стать f0в отличие от того, 00что происходит, когда вы просто добавляете 17 и берете мод 256).
Мартин Эндер

2
Вы должны опубликовать изображение для примера вывода, а не просто предоставить образец ввода. Кроме того, это очень хороший первый пост! Добро пожаловать на сайт!
DJMcMayhem

Ответы:


5

Пайк, 17 13 байт

.Fh16j%ijcjs 8{

Попробуй это здесь!

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

Принимает ввод в виде целочисленного массива пикселей и выводит его в том же формате

RAINBOWZ (нет единорога :()


Можете ли вы предоставить выходное изображение?
Хайкам

7

Mathematica, 78 байт

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

Принимает и возвращает объект изображения (чтобы создать объект изображения, просто вставьте изображение в Mathematica).

Результат для теста:

введите описание изображения здесь

Принимая входные данные и возвращая выходные данные в виде трехмерного массива целочисленных значений канала, это уменьшает до 51 байта :

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

Но эти мета-посты пока не имеют подавляющего количества поддержки, поэтому сейчас я собираюсь использовать 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 Woops, я не заметил, что спасибо
TuxCrafting

Там есть еще один 0xFF: D
Yytsi

Я думаю, что вы можете сэкономить больше байтов, сказав from PIL import*. Я также думаю, что это Image.openможет быть изменено только openпосле этого.
Yytsi

@TuukkaX Да, это можно изменить from PIL import*, но я не могу изменитьImage.open
TuxCrafting

1

Дьялог АПЛ , 21 15 байт

Программы могут выводить в виде матрицы значений пикселей RGB

Я предполагаю, что вывод может быть в том же формате.

Новое решение принимает матрицу значений [[ r , g , b , r , g , b ], [ r , g , b ,…

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]}¨

Необходимо ⎕IO←0, что по умолчанию на многих системах.

объяснение

{Для каждой 6-символьной строки RGB представьте ее как и сделайте:
n←⎕D,⎕Aприсвойте «0… 9A… Z» n, чтобы
⍵⍳⍨найти индексы отдельных символов в n,
1+ добавить один в индекс, то есть 0 → 1, 1 → 2, 15 → 16
16|модуль 16, т.е. 16 → 0
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

C - 114 113 70 66 61 72 67 байт

Вот код (с поддержкой тестового примера Мартина Эндера (без 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;
}

Golfed:

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;}. Также посмотрите этот пост: Советы по игре в гольф на Яве . :)
Кевин Круйссен

Вы не устанавливаете цвета правильно. Добавляя 0x111111 к значениям RGB, вы получаете возможность переполнения от одного шестнадцатеричного разряда до следующего. Например, # 49de5f должен стать # 5aef60, а не # 5aef70.
kamoroso94

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

      }
   }
}

красивая радуга

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.