#include "Helpers.h" #include #include #include #include int main(int argc,const char **argv) { if(argc!=2 && argc!=5) { fprintf(stderr,"Usage: %s palette.png output.png\n",argv[0]); fprintf(stderr," %s x y width height output.png\n",argv[0]); fprintf(stderr,"Where \"row\" is either \"+N\" for relative remapping or \"N\" for absolute.\n"); exit(1); } Bitmap *bitmap=AllocateBitmapWithContentsOfPNGFileOrDie("-"); Bitmap *palette; if(argc==2) { palette=AllocateBitmapWithContentsOfPNGFileOrDie(argv[1]); } else { int x=atoi(argv[1]); int y=atoi(argv[2]); int width=atoi(argv[3]); int height=atoi(argv[4]); palette=AllocateSubBitmapAsCopyOrDie(bitmap,x,y,width,height); } for(int i=0;iwidth*bitmap->height;i++) { Pixel p=bitmap->pixels[i]; int r=ExtractRed(p); int g=ExtractGreen(p); int b=ExtractBlue(p); int a=ExtractAlpha(p); int closest=0; int mindist=10000; for(int j=0;jwidth*palette->height;j++) { Pixel p2=palette->pixels[j]; int r2=ExtractRed(p2); int g2=ExtractGreen(p2); int b2=ExtractBlue(p2); int a2=ExtractAlpha(p2); int dist=sqrt((r-r2)*(r-r2)+(g-g2)*(g-g2)+(b-b2)*(b-b2)+(a-a2)*(a-a2)); if(distpixels[i]=palette->pixels[closest]; } SaveBitmapToPNGFileOrDie(bitmap,"-"); return 0; }