#include "Helpers.h" #include #include #include static int PixelChannel(Pixel p,char channel); int main(int argc,const char **argv) { if(argc!=2) { fprintf(stderr,"Usage: %s xxxx output.png\n",argv[0]); fprintf(stderr,"Where each \"x\" is one of r, g, b, a, 0 or 1.\n"); exit(1); } const char *filter=argv[1]; if(strlen(filter)!=4) { fprintf(stderr,"Usage: %s xxxx output.png\n",argv[0]); fprintf(stderr,"Where each \"x\" is one of r, g, b, a, 0 or 1.\n"); exit(1); } Bitmap *bitmap=AllocateBitmapWithContentsOfPNGFileOrDie("-"); char rchannel=tolower(filter[0]); char gchannel=tolower(filter[1]); char bchannel=tolower(filter[2]); char achannel=tolower(filter[3]); for(int i=0;iwidth*bitmap->height;i++) { Pixel p=bitmap->pixels[i]; bitmap->pixels[i]=RGBA( PixelChannel(p,rchannel), PixelChannel(p,gchannel), PixelChannel(p,bchannel), PixelChannel(p,achannel)); } SaveBitmapToPNGFileOrDie(bitmap,"-"); return 0; } static int PixelChannel(Pixel p,char channel) { if(channel=='r') return ExtractRed(p); else if(channel=='g') return ExtractGreen(p); else if(channel=='b') return ExtractBlue(p); else if(channel=='a') return ExtractAlpha(p); else if(channel=='0') return 0; else if(channel=='1') return 0xff; else return 0; }