#define NPB_ONG1_B 69
#define NPB_403_L 224
-#define NPB_403_R 265
+#define NPB_403_R 295
#define NPB_403_T 261
#define NPB_403_B 261
-char NPB_MISSING_ARGS[] = "Missing parameters.\nnpb [-o -4 -r -b -c] inPix outPix\n";
+char NPB_MISSING_ARGS[] = "Missing parameters.\nnpb [-o -4 -r -b -e -c] inPix outPix\n";
int subtool_npb (int argc, char **argv, int argi, char **err)
{
uint_fast8_t corners = 0;
uint_fast8_t fullsize = 0;
uint_fast8_t fill_white = 0;
+ uint_fast8_t fill_white_all = 0;
uint_fast8_t npb_after = 0;
uint_fast8_t expand_left = 0;
uint_fast8_t expand_right = 0;
uint_fast8_t expand_up = 0;
uint_fast8_t expand_down = 0;
- uint_fast8_t border_outside = 0;
uint_fast8_t fixed_frame = 0;
+ uint_fast8_t override_new_border = 0;
+ uint_fast8_t override_external_border = 0;
ILuint cut_border = 0;
- ILuint new_border = 2;
+ ILuint new_border;
+ ILuint external_border;
+ ILuint new_border_default = 2;
+ ILuint external_border_default = 0;
ILuint max = 0xFF; //upscale_value(0xFF, info[0].image_bpc); // bpc=1
ILint width_content, height_content, x0_content_own, y0_content_own, x0_content_global, y0_content_global;
ILint width_border, height_border, x0_border, y0_border;
ILint f0[2] = {0, 0};
struct option long_options[] = {
- {"ong1", no_argument, NULL, 'o'},
- {"403", no_argument, NULL, '4'},
- {"remove-border", required_argument, NULL, 'r'},
- {"new-border", required_argument, NULL, 'b'},
- {"corners", no_argument, NULL, 'c'},
- {"help", no_argument, NULL, 'h'},
- {0, 0, 0, 0}
+ {"ong1", no_argument, NULL, 'o'},
+ {"403", no_argument, NULL, '4'},
+ {"remove-border", required_argument, NULL, 'r'},
+ {"new-border", required_argument, NULL, 'b'},
+ {"external-border",required_argument, NULL, 'e'},
+ {"corners", no_argument, NULL, 'c'},
+ {"help", no_argument, NULL, 'h'},
+ {0, 0, 0, 0}
};
- char short_options[] = "o4r:b:ch";
+ char short_options[] = "o4r:b:e:ch";
int opt;
int r;
case 'b':
sscanf(optarg, "%u", &new_border);
fullsize = 1;
+ override_new_border = 1;
+ break;
+ case 'e':
+ sscanf(optarg, "%u", &external_border);
+ override_external_border = 1;
break;
case 'c':
corners = 1;
space_b = NPB_403_B;
expand_right = 1;
expand_up = 1;
- border_outside = 1;
- fill_white = 1;
+ new_border_default = 0;
+ external_border_default = 2;
+ fill_white_all = 1;
}
else if (ong1)
{
npb_after = 1;
}
+ /* determine borders' sizes */
+ if (!override_new_border)
+ new_border = new_border_default;
+ if (!override_external_border)
+ external_border = external_border_default;
+
/* load selected npb */
r = load_picture_mem(1, npb_pix, npb_size, &(info_npb), &(flags_npb));
/* determine rectangle of content with new border */
- if (border_outside)
- {
- width_border = width_content;
- height_border = height_content;
- }
- else
- {
- width_border = width_content + new_border * 2;
- height_border = height_content + new_border * 2;
- }
+ width_border = width_content + new_border * 2;
+ height_border = height_content + new_border * 2;
/* npb rectangle too */
width_npb = info_npb.image_width;
- height_npb = info_npb.image_width;
+ height_npb = info_npb.image_height;
x0_npb = 0;
y0_npb = 0;
/* determine content border placement in full picture */
- if (expand_right && (width_border <= (space_r - space_l +1)))
+ if (expand_right && (width_border >= (space_r - space_l +1)))
x0_border = space_l;
- else if (expand_left && (width_border <= (space_r - space_l +1)))
+ else if (expand_left && (width_border >= (space_r - space_l +1)))
x0_border = space_r - width_border + 1;
else
x0_border = (space_l + space_r + 1 - width_border) / 2;
- if (expand_down && (height_border <= (space_b - space_t +1)))
+ if (expand_down && (height_border >= (space_b - space_t +1)))
y0_border = space_t;
- else if (expand_up && (height_border <= (space_b - space_t +1)))
+ else if (expand_up && (height_border >= (space_b - space_t +1)))
y0_border = space_b - height_border + 1;
else
y0_border = (space_t + space_b + 1 - height_border) / 2;
/* determine content placement in border in full picture */
- if (border_outside)
- {
- x0_content_global = x0_border;
- y0_content_global = y0_border;
- }
- else
- {
- x0_content_global = x0_border + new_border;
- y0_content_global = y0_border + new_border;
- }
+ x0_content_global = x0_border + new_border;
+ y0_content_global = y0_border + new_border;
/* adjust full picture size & offsets if content doesn't fit */
/* adjust for external border */
- if (border_outside)
+ if (external_border > 0)
{
- width_total += 2 * new_border;
- height_total += 2 * new_border;
- x0_border += new_border;
- y0_border += new_border;
- x0_content_global += new_border;
- y0_content_global += new_border;
- x0_npb += new_border;
- y0_npb += new_border;
+ width_total += 2 * external_border;
+ height_total += 2 * external_border;
+ x0_border += external_border;
+ y0_border += external_border;
+ x0_content_global += external_border;
+ y0_content_global += external_border;
+ x0_npb += external_border;
+ y0_npb += external_border;
}
/* ok setup done, now perform actions */
color.red = max;
color.green = max;
color.blue = max;
- color.alpha = (border_outside && fill_white) ? max : 0;
+ color.alpha = fill_white_all ? max : 0;
r = perform_action_1picture(
2, //id
- border_outside ? new_border : 0, //x0
- border_outside ? new_border : 0, //y0
+ external_border, //x0
+ external_border, //y0
0, //f0
- border_outside ? (width_total - 2 * new_border) : width_total, //width
- border_outside ? (height_total - 2 * new_border) : height_total, //height
+ (width_total - 2 * external_border), //width
+ (height_total - 2 * external_border), //height
1, //frames
&fill_color, //function
flags_total | IN_WINDOW | NOT_READABLE, //flags
/* 3: draw border outside */
- if (border_outside && (new_border >0))
+ if (external_border >0)
{
color.red = 0;
color.green = 0;
0, //y0
0, //f0
width_total, //width
- new_border, //height
+ external_border, //height
1, //frames
&fill_color, //function
flags_total | IN_WINDOW | NOT_READABLE, //flags
r = perform_action_1picture( //bottom
2, //id
0, //x0
- height_total - new_border, //y0
+ height_total - external_border, //y0
0, //f0
width_total, //width
- new_border, //height
+ external_border, //height
1, //frames
&fill_color, //function
flags_total | IN_WINDOW | NOT_READABLE, //flags
r = perform_action_1picture( //left
2, //id
0, //x0
- new_border, //y0
+ external_border, //y0
0, //f0
- new_border, //width
- height_total - 2*new_border, //height
+ external_border, //width
+ height_total - 2*external_border, //height
1, //frames
&fill_color, //function
flags_total | IN_WINDOW | NOT_READABLE, //flags
r = perform_action_1picture( //right
2, //id
- width_total - new_border, //x0
- new_border, //y0
+ width_total - external_border, //x0
+ external_border, //y0
0, //f0
- new_border, //width
- height_total - 2*new_border, //height
+ external_border, //width
+ height_total - 2*external_border, //height
1, //frames
&fill_color, //function
flags_total | IN_WINDOW | NOT_READABLE, //flags
if (corners)
{
+ color.alpha = 0;
+
r = perform_action_1picture_1pixel( //top-left
2, //id
- new_border, //x0
- new_border, //y0
+ 0, //x0
+ 0, //y0
0, //f0
&fill_color, //function
flags_total | IN_WINDOW | NOT_READABLE, //flags
r = perform_action_1picture_1pixel( //top-right
2, //id
- width_total - new_border - 1, //x0
- new_border, //y0
+ width_total - 1, //x0
+ 0, //y0
0, //f0
&fill_color, //function
flags_total | IN_WINDOW | NOT_READABLE, //flags
r = perform_action_1picture_1pixel( //bottom-right
2, //id
- width_total - new_border - 1, //x0
- height_total - new_border - 1, //y0
+ width_total - 1, //x0
+ height_total - 1, //y0
0, //f0
&fill_color, //function
flags_total | IN_WINDOW | NOT_READABLE, //flags
r = perform_action_1picture_1pixel( //bottom-left
2, //id
- new_border, //x0
- height_total - new_border - 1, //y0
+ 0, //x0
+ height_total - 1, //y0
0, //f0
&fill_color, //function
flags_total | IN_WINDOW | NOT_READABLE, //flags
/* 5: fill_background */
- if ((!border_outside) && fill_white)
+ if (fill_white)
{
color.red = max;
color.green = max;
/* 7: draw border */
- if ((!border_outside) && (new_border >0))
+ if (new_border >0)
{
color.red = 0;
color.green = 0;
return 0;
}
-/*
-#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);
-}
- */