--- /dev/null
+ // //It's NewpixbOTTification Time!
+ // // Take a picture and add a newpixbot to it!
+ // //
+ // // Requires Dev Image Library,
+// // //on Pentium III libdevil must be
+ // // recompiled with --disable-ssl2 --disable-ssl3
+ // //
+ // // ~~bicyclesonthemoon
+
+#define INPIX_MUSTARD 1
+#define OUTPIX_MUSTARD 2
+#define NPBPIX_MUSTARD 3
+#define ARGUMENT_MUSTARD 4
+#define SEAISH_MUSTARD 5
+#define ANIMATED_MUSTARD 6
+#define FAIL 900
+#define OK 0
+
+#define NPBPIX0 "npb0.png"
+#define X0 411
+#define X01 21
+#define X02 96
+#define Y0 404
+#define Y01 214
+#define Y02 68
+
+#define NPBPIX1 "npb1.png"
+#define X1 411
+#define X11 22
+#define X12 133
+#define Y1 404
+#define Y11 241
+#define Y12 94
+
+#define NPBPIX2 "npb2.png"
+#define X2 411
+#define X21 213
+#define Y2 404
+#define Y21 234
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <IL/il.h>
+
+void mustard(int mustard);
+void loadnpb(const char *path);
+void npbottify0(const char *path);
+void npbottify1(const char *path);
+void npbottify2(const char *path);
+int main (int argc, const char *argv[]);
+
+ILuint inPix, outPix, npbPix;
+ILboolean q=true;
+ILboolean inH=false;
+ILboolean outH=false;
+ILboolean npbH=false;
+ILuint inX, inY, outX, outY;
+ILubyte *newdata;
+
+int main (int argc, const char *argv[])
+{
+ if(argc<3)
+ mustard(ARGUMENT_MUSTARD);
+ if (argc>=4)
+ {
+ if (argv[3][0]=='q' || argv[3][0]=='Q')
+ q=false;
+ }
+
+ ilInit();
+ if(!ilEnable(IL_ORIGIN_SET))mustard(FAIL);
+ if(!ilEnable(IL_FILE_OVERWRITE))mustard(FAIL);
+ ilClearColour(255,255,0,0);
+ ilGenImages(1, &inPix);
+ inH=true;
+ ilBindImage(inPix);
+ if(!ilLoadImage(argv[1]))mustard(INPIX_MUSTARD);
+ if(!ilConvertImage(IL_RGBA,IL_UNSIGNED_BYTE))mustard(INPIX_MUSTARD);
+ //if(!ilConvertPal(IL_PAL_RGBA32))mustard(FAIL);
+
+ inX=ilGetInteger(IL_IMAGE_WIDTH);
+ inY=ilGetInteger(IL_IMAGE_HEIGHT);
+ if(ilGetInteger(IL_NUM_IMAGES)>1)
+ mustard(ANIMATED_MUSTARD);
+
+ if(inX<=X02&&inY<=Y02)
+ npbottify0(argv[2]);
+ else if(inX<=X12&&inY<=Y12)
+ npbottify1(argv[2]);
+ else
+ npbottify2(argv[2]);
+ //ok
+ mustard(0);
+}
+
+void loadnpb(const char *path)
+{
+ ilGenImages(1, &npbPix);
+ npbH=true;
+ ilBindImage(npbPix);
+ if(!ilLoadImage(path))mustard(NPBPIX_MUSTARD);
+ if(!ilConvertImage(IL_RGBA,IL_UNSIGNED_BYTE))mustard(NPBPIX_MUSTARD);
+}
+
+void npbottify0(const char *path)
+{
+ //newdata= new ILubyte[X0*Y0*4];
+ ilGenImages(1, &outPix);
+ outH=true;
+ loadnpb(NPBPIX0);
+ ilBindImage(outPix);
+ if(!ilCopyImage(npbPix))mustard(FAIL);
+ //if(!ilTexImage(X0,Y0,1,4,IL_RGBA,IL_UNSIGNED_BYTE,NULL))mustard(OUTPIX_MUSTARD);
+ //if(!ilConvertImage(IL_RGBA,IL_UNSIGNED_BYTE))mustard(OUTPIX_MUSTARD);
+ newdata=ilGetData();
+ for(unsigned long i=0;i<X0;++i)
+ {
+ for(unsigned long j=0;j<Y0;++j)
+ {
+ if((i>=X01+(X02-inX)/2)&&
+ (i< X01+(X02-inX)/2+inX)&&
+ (j>=Y01+(Y02-inY)/2)&&
+ (j< Y01+(Y02-inY)/2+inY))
+ {
+ newdata[4*(i+X0*j)+0]=0xFF;
+ newdata[4*(i+X0*j)+1]=0xFF;
+ newdata[4*(i+X0*j)+2]=0xFF;
+ newdata[4*(i+X0*j)+3]=0xFF;
+ }
+ else if((i>=X01)&&(i<X01+X02)&&
+ (j>=Y01)&&(j<Y01+Y02))
+ {
+ newdata[4*(i+X0*j)+0]=0xFF;//looks better white
+ newdata[4*(i+X0*j)+1]=0xFF;
+ newdata[4*(i+X0*j)+2]=0xFF;
+ newdata[4*(i+X0*j)+3]=0xFF;
+ }
+ else
+ {
+ //newdata[4*(i+X0*j)+0]=0xFF;
+ //newdata[4*(i+X0*j)+1]=0xFF;
+ //newdata[4*(i+X0*j)+2]=0xFF;
+ //newdata[4*(i+X0*j)+3]=0x00;
+ }
+ }
+ }
+ //if(!ilSetData(newdata))mustard(OUTPIX_MUSTARD);
+
+ //printf("%d\n",iCurImage);
+ if(!ilOverlayImage(inPix,X01+(X02-inX)/2,Y0-inY-(Y01+(Y02-inY)/2),0))mustard(FAIL);
+ if(!ilOverlayImage(npbPix,0,0,0))mustard(FAIL);
+ if(!ilSave(IL_PNG,path))mustard(OUTPIX_MUSTARD);
+}
+
+void npbottify1(const char *path)
+{
+ //newdata= new ILubyte[X0*Y0*4];
+ ilGenImages(1, &outPix);
+ outH=true;
+ loadnpb(NPBPIX1);
+ ilBindImage(outPix);
+ if(!ilCopyImage(npbPix))mustard(FAIL);
+ //if(!ilTexImage(X1,Y1,1,4,IL_RGBA,IL_UNSIGNED_BYTE,NULL))mustard(OUTPIX_MUSTARD);
+ //if(!ilConvertImage(IL_RGBA,IL_UNSIGNED_BYTE))mustard(OUTPIX_MUSTARD);
+ newdata=ilGetData();
+ for(unsigned long i=0;i<X1;++i)
+ {
+ for(unsigned long j=0;j<Y1;++j)
+ {
+ if((i>=X11+(X12-inX)/2)&&
+ (i< X11+(X12-inX)/2+inX)&&
+ (j>=Y11+(Y12-inY)/2)&&
+ (j< Y11+(Y12-inY)/2+inY))
+ {
+ newdata[4*(i+X1*j)+0]=0xFF;
+ newdata[4*(i+X1*j)+1]=0xFF;
+ newdata[4*(i+X1*j)+2]=0xFF;
+ newdata[4*(i+X1*j)+3]=0xFF;
+ }
+ else if((i>=X11)&&(i<X11+X12)&&
+ (j>=Y11)&&(j<Y11+Y12))
+ {
+ newdata[4*(i+X1*j)+0]=0x00;
+ newdata[4*(i+X1*j)+1]=0x00;
+ newdata[4*(i+X1*j)+2]=0x00;
+ newdata[4*(i+X1*j)+3]=0xFF;
+ }
+ else
+ {
+ //
+ }
+ }
+ }
+ //if(!ilSetData(newdata))mustard(OUTPIX_MUSTARD);
+
+ //printf("%d\n",iCurImage);
+ if(!ilOverlayImage(inPix,X11+(X12-inX)/2,Y1-inY-(Y11+(Y12-inY)/2),0))mustard(FAIL);
+ //(!ilOverlayImage(npbPix,0,0,0))mustard(FAIL);
+ if(!ilSave(IL_PNG,path))mustard(OUTPIX_MUSTARD);
+}
+
+void npbottify2(const char *path)
+{
+ unsigned long i,j;
+ outX=(X21+inX+2>X2)?(X21+inX+2):X2;
+ outY=(Y21+inY+2>Y2)?(Y21+inY+2):Y2;
+ ilGenImages(1, &outPix);
+ outH=true;
+ loadnpb(NPBPIX2);
+ newdata=ilGetData();
+ ilBindImage(outPix);
+ if(!ilTexImage(outX,outY,1,4,IL_RGBA,IL_UNSIGNED_BYTE,NULL))mustard(OUTPIX_MUSTARD);
+ if(!ilClearImage())mustard(FAIL);
+ ilSetPixels(outX-X2,0,0,X2,Y2,1,IL_RGBA,IL_UNSIGNED_BYTE,newdata);
+ newdata=ilGetData();
+ for(i=outX-X21-inX-2;i<outX-X21+2;++i)
+ {
+ //printf("i=%lu\n",i);
+ for(j=Y21-2;j<Y21+inY+2;++j)
+ {
+ //printf("i=%lu j=%lu\n",i,j);
+ if((i==outX-X21-inX-2)||(i==outX-X21-inX-1)||
+ (i==outX-X21 +1)||(i==outX-X21 )||
+ (j== Y21 -2)||(j== Y21 -1)||
+ (j== Y21+inY+1)||(j== Y21+inY ))
+ {
+ newdata[4*(i+outX*j)+0]=0x00;
+ newdata[4*(i+outX*j)+1]=0x00;
+ newdata[4*(i+outX*j)+2]=0x00;
+ newdata[4*(i+outX*j)+3]=0xFF;
+ }
+ else
+ {
+ newdata[4*(i+outX*j)+0]=0xFF;
+ newdata[4*(i+outX*j)+1]=0xFF;
+ newdata[4*(i+outX*j)+2]=0xFF;
+ newdata[4*(i+outX*j)+3]=0xFF;
+ }
+ }
+ }
+
+ if(!ilOverlayImage(inPix,outX-X21-inX,outY-Y21-inY,0))mustard(FAIL);
+
+ i=outX-X21-inX-2;
+ j=Y21-2;
+ newdata[4*(i+outX*j)+0]=0x00;
+ newdata[4*(i+outX*j)+1]=0x00;
+ newdata[4*(i+outX*j)+2]=0x00;
+ newdata[4*(i+outX*j)+3]=0x00;
+ j=Y21+inY+1;
+ newdata[4*(i+outX*j)+0]=0x00;
+ newdata[4*(i+outX*j)+1]=0x00;
+ newdata[4*(i+outX*j)+2]=0x00;
+ newdata[4*(i+outX*j)+3]=0x00;
+ i=outX-X21+1;
+ newdata[4*(i+outX*j)+0]=0x00;
+ newdata[4*(i+outX*j)+1]=0x00;
+ newdata[4*(i+outX*j)+2]=0x00;
+ newdata[4*(i+outX*j)+3]=0x00;
+ j=Y21-2;
+ newdata[4*(i+outX*j)+0]=0x00;
+ newdata[4*(i+outX*j)+1]=0x00;
+ newdata[4*(i+outX*j)+2]=0x00;
+ newdata[4*(i+outX*j)+3]=0x00;
+
+ i=outX-X21-inX;
+ j=Y21;
+ newdata[4*(i+outX*j)+0]=0x00;
+ newdata[4*(i+outX*j)+1]=0x00;
+ newdata[4*(i+outX*j)+2]=0x00;
+ newdata[4*(i+outX*j)+3]=0xFF;
+ j=Y21+inY-1;
+ newdata[4*(i+outX*j)+0]=0x00;
+ newdata[4*(i+outX*j)+1]=0x00;
+ newdata[4*(i+outX*j)+2]=0x00;
+ newdata[4*(i+outX*j)+3]=0xFF;
+ i=outX-X21-1;
+ newdata[4*(i+outX*j)+0]=0x00;
+ newdata[4*(i+outX*j)+1]=0x00;
+ newdata[4*(i+outX*j)+2]=0x00;
+ newdata[4*(i+outX*j)+3]=0xFF;
+ j=Y21;
+ newdata[4*(i+outX*j)+0]=0x00;
+ newdata[4*(i+outX*j)+1]=0x00;
+ newdata[4*(i+outX*j)+2]=0x00;
+ newdata[4*(i+outX*j)+3]=0xFF;
+
+ if(!ilSave(IL_PNG,path))mustard(OUTPIX_MUSTARD);
+
+
+}
+
+void mustard(int mustard)
+{
+ switch(mustard)
+ {
+ case 0:
+ if(q) printf("NewpixbOTTified!\n");break;
+ case ARGUMENT_MUSTARD:
+ if(q) printf("npb inPix outPix [q]\n");break;
+ case INPIX_MUSTARD:
+ if(q) printf("inPIX mustard.\n");break;
+ case OUTPIX_MUSTARD:
+ if(q) printf("outPIX mustard.\n");break;
+ case NPBPIX_MUSTARD:
+ if(q) printf("npbPIX mustard.\n");break;
+ case SEAISH_MUSTARD:
+ if(q) printf("Seaishness is mustard.\n");break;
+ case ANIMATED_MUSTARD:
+ if(q) printf("Animation is mustard.\n");break;
+ default:
+ if (q) printf("Ch*rpin* mustard mustaard!\n");
+ }
+ if(inH)
+ ilDeleteImages(1, &inPix);
+ if(outH)
+ {
+ ilDeleteImages(1, &outPix);
+ //delete[] newdata;
+ }
+ if(npbH)
+ ilDeleteImages(1, &npbPix);
+ exit(mustard);
+}
+