C + stb_image + stb_image_write、 175 162バイト(または+ 72 =247 234)
このサイトでの私の最初の提出。
#include"stb_image.h"
#include"stb_image_write.h"
x,y,c,i;f(char*d){d=stbi_load(d,&x,&y,&c,i=0);for(;i<x*y*c;i++)d[i]=255-d[i];stbi_write_png("a.png",x,y,c,d,0);}
おそらく数バイトを削ることができます。ニーズstb_*
のいずれかへの実装が別のライブラリであること、またはこのファイルの先頭に:
#define STB_IMAGE_IMPLEMENTATION
#define STB_IMAGE_WRITE_IMPLEMENTATION
これは基本的にライブラリの一部であるため、カウントに含めませんでした(特に、個別にコンパイルされる場合)。ただし、必要に応じて+72バイトを追加します。
更新1:
(プログラム全体ではなく)関数のみが許容され、15バイトを削減します。参照用の古い実装(プログラム全体):
x,y,i;main(int c,char**d){*d=stbi_load(d[1],&x,&y,&c,0);for(;i<x*y*c;i++)i[*d]=255-i[*d];stbi_write_png("a.png",x,y,c,*d,0);}