From 640debd660fb301f3eb6d94f0047eaf754b0b5b9 Mon Sep 17 00:00:00 2001 From: b <rowerynaksiezycu@gmail.com> Date: Wed, 30 Nov 2022 01:00:49 +0000 Subject: [PATCH] back to npb --- 403.png | Bin 17828 -> 0 bytes core.c | 139 ++++++++++++++++++++++++++++----- core.h | 60 +++++++++------ data/npb-ong1.png | Bin 11994 -> 0 bytes diff.c | 2 +- enhance.c | 1 + f2h.c | 104 +++++++++++++++++++++++++ makefile | 40 ++++++++-- makefile.1.mak | 40 ++++++++-- nofading.c | 10 +-- npb.cpp => npb.c | 190 +++++++++++++++++++++++++++++++++++++++++++--- npb.h | 28 +++++++ npb_403.png | Bin 0 -> 15489 bytes npb_ong1.png | Bin 0 -> 6366 bytes reveal.c | 4 +- 15 files changed, 547 insertions(+), 71 deletions(-) delete mode 100644 403.png delete mode 100644 data/npb-ong1.png create mode 100644 f2h.c rename npb.cpp => npb.c (64%) create mode 100644 npb.h create mode 100644 npb_403.png create mode 100644 npb_ong1.png diff --git a/403.png b/403.png deleted file mode 100644 index c6bc7de1e26456d9df7dc66deaced77519cba0f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17828 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 Qzg@vlkX412OFs|#UqJUYQvd(} diff --git a/core.c b/core.c index f79c6ad..4283561 100644 --- a/core.c +++ b/core.c @@ -201,7 +201,7 @@ int reserve_pictures (uint_fast16_t n) void get_flags (struct IL_full_info *info, FLAG_TYPE *flags) { - *flags &= ~(HAS_ALPHA | IS_GRAY | IS_INDEXED | IS_MULTIPLE | IS_OVER_8BIT); + *flags &= ~(HAS_ALPHA | IS_GRAY | IS_INDEXED | IS_MULTIPLE | IS_OVER_8BIT | EFF_ALPHA | EFF_GRAY | EFF_INDEXED); if (info->num_images > 0) *flags |= IS_MULTIPLE; @@ -212,7 +212,7 @@ void get_flags (struct IL_full_info *info, FLAG_TYPE *flags) switch (info->image_format) { case IL_COLOUR_INDEX: - *flags |= IS_INDEXED; + *flags |= IS_INDEXED | EFF_INDEXED; switch (info->palette_type) { case IL_PAL_BGR32: @@ -221,7 +221,7 @@ void get_flags (struct IL_full_info *info, FLAG_TYPE *flags) break; case IL_PAL_BGRA32: case IL_PAL_RGBA32: - *flags |= HAS_ALPHA; + *flags |= HAS_ALPHA | EFF_ALPHA; break; case IL_PAL_RGB24: case IL_PAL_BGR24: @@ -230,13 +230,13 @@ void get_flags (struct IL_full_info *info, FLAG_TYPE *flags) } break; case IL_LUMINANCE_ALPHA: - *flags |= HAS_ALPHA; + *flags |= HAS_ALPHA | EFF_ALPHA; case IL_LUMINANCE: - *flags |= IS_GRAY; + *flags |= IS_GRAY | EFF_GRAY; break; case IL_RGBA: case IL_BGRA: - *flags |= HAS_ALPHA; + *flags |= HAS_ALPHA | EFF_ALPHA; case IL_RGB: case IL_BGR: default: @@ -817,7 +817,7 @@ int perform_action ( if (r!=0) break; - p[i].flags &= ~(IS_GRAY|IS_INDEXED|IS_OVER_8BIT|IS_PALETTE_ONLY); + p[i].flags &= ~(HAS_ALPHA|IS_GRAY|IS_INDEXED|IS_OVER_8BIT|IS_PALETTE_ONLY|EFF_ALPHA|EFF_GRAY|EFF_INDEXED); if (palette_only) p[i].flags |= IS_PALETTE_ONLY; @@ -837,7 +837,7 @@ int perform_action ( switch (p[i].info.image_format) { case IL_COLOUR_INDEX: - p[i].flags |= IS_INDEXED; + p[i].flags |= IS_INDEXED | EFF_INDEXED; r = get_palette(p[i].id, &(p[i].palette), p[i].f_pict); if (r!=0) break; @@ -848,7 +848,7 @@ int perform_action ( p[i].flags |= IS_OVER_8BIT; break; case IL_PAL_BGRA32: - p[i].flags |= HAS_ALPHA; + p[i].flags |= HAS_ALPHA | EFF_ALPHA; p[i].alpha_offset = 3; case IL_PAL_BGR24: p[i].red_offset = 2; @@ -856,7 +856,7 @@ int perform_action ( p[i].blue_offset = 0; break; case IL_PAL_RGBA32: - p[i].flags |= HAS_ALPHA; + p[i].flags |= HAS_ALPHA | EFF_ALPHA; p[i].alpha_offset = 3; case IL_PAL_RGB24: default: @@ -867,14 +867,14 @@ int perform_action ( } break; case IL_LUMINANCE_ALPHA: - p[i].flags |= HAS_ALPHA; + p[i].flags |= HAS_ALPHA | EFF_ALPHA; p[i].alpha_offset = 1 * p[i].info.image_bpc; case IL_LUMINANCE: - p[i].flags |= IS_GRAY; + p[i].flags |= IS_GRAY | EFF_GRAY; p[i].value_offset = 0 * p[i].info.image_bpc; break; case IL_BGRA: - p[i].flags |= HAS_ALPHA; + p[i].flags |= HAS_ALPHA | EFF_ALPHA; p[i].alpha_offset = 3 * p[i].info.image_bpc; case IL_BGR: p[i].red_offset = 2 * p[i].info.image_bpc; @@ -882,7 +882,7 @@ int perform_action ( p[i].blue_offset = 0 * p[i].info.image_bpc; break; case IL_RGBA: - p[i].flags |= HAS_ALPHA; + p[i].flags |= HAS_ALPHA | EFF_ALPHA; p[i].alpha_offset = 3 * p[i].info.image_bpc; case IL_RGB: default: @@ -893,6 +893,17 @@ int perform_action ( } if (p[i].info.image_bpc > 1) p[i].flags |= IS_OVER_8BIT; + + if ((p[i].flags & IS_INDEXED) && (p[i].flags & CANNOT_BE_INDEXED)) + p[i].flags &= ~EFF_INDEXED; + if ((p[i].flags & IS_GRAY) && (p[i].flags & CANNOT_BE_GRAY)) + p[i].flags &= ~EFF_GRAY; + else if (!(p[i].flags & IS_GRAY) && (p[i].flags & MUST_BE_GRAY)) + p[i].flags |= EFF_GRAY; + if ((!(p[i].flags & HAS_ALPHA)) && (p[i].flags & MUST_HAVE_ALPHA)) + p[i].flags |= EFF_ALPHA; + else if ((p[i].flags & HAS_ALPHA) && (p[i].flags & CANNOT_HAVE_ALPHA)) + p[i].flags &= ~EFF_ALPHA; } if (!skip_frame) { @@ -1303,10 +1314,8 @@ int perform_action_palette_mix ( { case IL_PAL_BGR32: case IL_PAL_RGB32: - p[i].flags |= IS_OVER_8BIT; break; case IL_PAL_BGRA32: - p[i].flags |= HAS_ALPHA; p[i].alpha_offset = 3; case IL_PAL_BGR24: p[i].red_offset = 2; @@ -1314,7 +1323,6 @@ int perform_action_palette_mix ( p[i].blue_offset = 0; break; case IL_PAL_RGBA32: - p[i].flags |= HAS_ALPHA; p[i].alpha_offset = 3; case IL_PAL_RGB24: default: @@ -1323,6 +1331,15 @@ int perform_action_palette_mix ( p[i].blue_offset = 2; break; } + + if ((p[i].flags & IS_GRAY) && (p[i].flags & CANNOT_BE_GRAY)) + p[i].flags &= ~EFF_GRAY; + else if (!(p[i].flags & IS_GRAY) && (p[i].flags & MUST_BE_GRAY)) + p[i].flags |= EFF_GRAY; + if ((!(p[i].flags & HAS_ALPHA)) && (p[i].flags & MUST_HAVE_ALPHA)) + p[i].flags |= EFF_ALPHA; + else if ((p[i].flags & HAS_ALPHA) && (p[i].flags & CANNOT_HAVE_ALPHA)) + p[i].flags &= ~EFF_ALPHA; } if (!skip_frame) { @@ -1415,6 +1432,94 @@ ILubyte downscale_value (ILuint x, ILint bytes) return (ILubyte)(x >> (8 * (bytes-1))); } +int copy_pixels (ILuint n, struct PixelInfo *p, void *data) +{ + ILuint max = *((ILuint *)data); + + if (n < 2) + return EINVAL; + + if (p[0].flags & EFF_INDEXED) + { + if (!(p[1].flags & EFF_INDEXED)) + return EINVAL; + p[1].index = p[0].index; + } + else if (p[0].flags & EFF_ALPHA) + { + if (p[0].flags & EFF_GRAY) + { + if (!(p[1].flags & EFF_GRAY)) + return EINVAL; + p[1].value = copy_1p_alpha(p[0].value, p[1].value, p[0].alpha, max); + } + else + { + if (p[1].flags & EFF_GRAY) + return EINVAL; + p[1].red = copy_1p_alpha(p[0].red, p[1].red, p[0].alpha, max); + p[1].green = copy_1p_alpha(p[0].green, p[1].green, p[0].alpha, max); + p[1].blue = copy_1p_alpha(p[0].blue, p[1].blue, p[0].alpha, max); + } + if (p[1].flags & EFF_ALPHA) + p[1].alpha = copy_1p_alpha(max, p[1].alpha, p[0].alpha, max); + } + else + { + if (p[0].flags & EFF_GRAY) + { + if (!(p[1].flags & EFF_GRAY)) + return EINVAL; + p[1].value = p[0].value + } + else + { + if (p[1].flags & EFF_GRAY) + return EINVAL; + p[1].red = p[0].red; + p[1].green = p[0].green; + p[1].blue = p[0].blue; + } + if (p[1].flags & EFF_ALPHA) + p[1].alpha = max; + } + + return 0; +} + +int fill_color (ILuint n, struct PixelInfo *p, void *data) +{ + struct ColorInfo *d = data; + + if (p->flags & EFF_INDEXED) + { + p->index = d->index; + } + else + { + if (p->flags & EFF_ALPHA) + p->alpha = d->alpha; + if (p->flags & EFF_GRAY) + p->value = d->value; + else + { + p->red = d->red; + p->green = d->green; + p->blue = d->blue; + } + } + + return 0; +} + + +ILuint copy_1p_alpha (ILint64 src, ILint64 dst, ILint64 alpha, iILint64 max) +{ + ILint64 v = (src * alpha + dst * (max - alpha)) / max; + return (ILuint)v; +} + + // int action( // ILuint n, struct PixelInfo *info, void *data // ) diff --git a/core.h b/core.h index 144979d..15af406 100644 --- a/core.h +++ b/core.h @@ -34,28 +34,32 @@ on Pentium III libdevil must be recompiled with #define FLAG_TYPE uint_fast32_t -#define MUST_HAVE_ALPHA 0x00001 -#define CANNOT_HAVE_ALPHA 0x00002 -#define MUST_BE_GRAY 0x00004 -#define CANNOT_BE_GRAY 0x00008 -#define MUST_BE_INDEXED 0x00010 -#define CANNOT_BE_INDEXED 0x00020 +#define MUST_HAVE_ALPHA 0x000001 +#define CANNOT_HAVE_ALPHA 0x000002 +#define MUST_BE_GRAY 0x000004 +#define CANNOT_BE_GRAY 0x000008 +#define MUST_BE_INDEXED 0x000010 +#define CANNOT_BE_INDEXED 0x000020 -#define OK_PALETTE_ONLY 0x00040 -#define CAN_BE_MULTIPLE 0x00080 -#define CAN_BE_OVER_8BIT 0x00100 +#define OK_PALETTE_ONLY 0x000040 +#define CAN_BE_MULTIPLE 0x000080 +#define CAN_BE_OVER_8BIT 0x000100 -#define IN_WINDOW 0x00200 +#define IN_WINDOW 0x000200 -#define HAS_ALPHA 0x00400 -#define IS_GRAY 0x00800 -#define IS_INDEXED 0x01000 -#define IS_MULTIPLE 0x02000 -#define IS_OVER_8BIT 0x04000 -#define IS_PALETTE_ONLY 0x08000 +#define HAS_ALPHA 0x000400 +#define IS_GRAY 0x000800 +#define IS_INDEXED 0x001000 +#define IS_MULTIPLE 0x002000 +#define IS_OVER_8BIT 0x004000 +#define IS_PALETTE_ONLY 0x008000 -#define NOT_WRITABLE 0x10000 -#define NOT_READABLE 0x20000 +#define NOT_WRITABLE 0x010000 +#define NOT_READABLE 0x020000 + +#define EFF_ALPHA 0x040000 +#define EFF_GRAY 0x080000 +#define EFF_INDEXED 0x100000 extern char NO_STR[]; extern char INIT_FAILED[]; @@ -167,13 +171,19 @@ struct PixelInfo struct IL_full_info info; }; -typedef int (ACTION_F)(ILuint n, struct PixelInfo *info, void *data); +struct ColorInfo +{ + ILuint red; + ILuint green; + ILuint blue; + ILuint value; + ILuint alpha; + ILuint index; +} +typedef int (ACTION_F)(ILuint n, struct PixelInfo *info, void *data); typedef int (SUBTOOL_F)(int argc, char **argv, int argi, char **err); - - - void finish (int const returnvalue, char const * const returntext); @@ -225,4 +235,8 @@ int perform_action_palette_mix ( void *data ); -//ACTION_F action; \ No newline at end of file + + +int copy_pixels (ILuint n, struct PixelInfo *p, void *data); +ILuint copy_1p_alpha (ILint64 src, ILint64 dst, ILint64 alpha, iILint64 max); +int fill_color (ILuint n, struct PixelInfo *p, void *data); \ No newline at end of file diff --git a/data/npb-ong1.png b/data/npb-ong1.png deleted file mode 100644 index 36db7c7520878132237266eb4d667d6d3b507dae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11994 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 URrNWUSqI$HeV|jN_2lLM0aOWI#sB~S diff --git a/diff.c b/diff.c index 23b7054..4f44997 100644 --- a/diff.c +++ b/diff.c @@ -276,7 +276,7 @@ int difference (ILuint n, struct PixelInfo *p, void *data) p[2].red = diff_1ch(p[0].red, p[1].red, d->r_a, d->r_b, d->max); p[2].green = diff_1ch(p[0].green, p[1].green, d->g_a, d->g_b, d->max); p[2].blue = diff_1ch(p[0].blue, p[1].blue, d->b_a, d->b_b, d->max); - if (p[2].flags & HAS_ALPHA) + if (p[2].flags & EFF_ALPHA) p[2].alpha = (p[0].alpha + p[1].alpha) / 2; /* no better idea */ return 0; diff --git a/enhance.c b/enhance.c index be6a6b5..7fc3a75 100644 --- a/enhance.c +++ b/enhance.c @@ -34,6 +34,7 @@ on Pentium III libdevil must be recompiled with #include "bluenh.h" #include "reveal.h" #include "diff.h" +#include "npb.h" int main (int argc, char **argv) { diff --git a/f2h.c b/f2h.c new file mode 100644 index 0000000..32fb519 --- /dev/null +++ b/f2h.c @@ -0,0 +1,104 @@ +/* +f2h.c +make file into h +29.11.2022 + +Copyright (C) 2022 Balthasar SzczepaÅski + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + +*/ + +#include <stdio.h> +#include <stdint.h> +#include <inttypes.h> +#include <errno.h> + +char DEFAULT_NAME[] = "data"; +FILE *infile, *outfile; +uint_fast8_t in_open = 0; +uint_fast8_t out_open = 0; + +int cleanup(int r) +{ + if (out_open) + fclose(outfile); + if (in_open) + fclose(infile); + return r; +} + +int main (int argc, char **argv) +{ + char *name; + uint_fast8_t i; + uint8_t x; + uint_fast64_t size=0; + + if (argc >= 2) + name = argv[1]; + else + name = DEFAULT_NAME; + if (argc >= 3) + { + infile = fopen(argv[2], "rb"); + if (infile==NULL) + return cleanup(EIO); + in_open = 1; + } + else + infile = stdin; + if (argc >= 4) + { + outfile = fopen(argv[3], "wt"); + if (outfile==NULL) + return cleanup(EIO); + out_open = 1; + } + else + outfile = stdout; + + fprintf( + outfile, + "/* %s is autogenerated%s%s. */\n", + out_open ? argv[3] : "File", + in_open ? " from " : "", + in_open ? argv[2] : "" + ); + fputs ("#include <stdint.h>\n", outfile); + fprintf( + outfile, + "const uint8_t %s[] = {", + name + ); + for (i=0; fread(&x, 1, 1, infile)!=0;i=(i+1)&7) + { + fprintf( + outfile, + "%s0x%02" PRIX8 ",", + (i==0) ? "\n\t" : " ", + x + ); + ++size + } + fputs ("\n};\n", outfile); + fprintf( + outfile, + "#define %s_size %" PRIu64 "\n", + name, + size + ); + + return cleanup(0); +} diff --git a/makefile b/makefile index 16f61c1..2d65650 100644 --- a/makefile +++ b/makefile @@ -42,28 +42,45 @@ nofading\ info\ bluenh\ reveal\ -diff +diff\ +npb C_STANDALONE=\ standalone-nofading.c\ standalone-info.c\ standalone-bluenh.c\ standalone-reveal.c\ -standalone-diff.c +standalone-diff.c\ +standalone-npb.c C_SUBTOOL=\ nofading.c\ info.c\ bluenh.c\ reveal.c\ -diff.c +diff.c\ +npb.c H_SUBTOOL=\ nofading.h\ info.h\ bluenh.h\ reveal.h\ -diff.h +diff.h\ +npb.h + +H_PNG=\ +npb0.h\ +npb1.h\ +npb2.h\ +npb_ong1.h\ +npb_403.h + +# keep these 2 lists in the same order!: +GENERATE_FROM= + +TO_GENERATE= + #all: 403 npb npbd npb-ong1 npbd-ong1 bluenh bluenhd insert extract seediff insertframe mremapt-1 compare nofading nofadingd @@ -74,21 +91,30 @@ makefile: makefile.1.mak $(CONFIGFILE) $(CONFIGURE_CMD) < makefile.1.mak > makefile -enhance: enhance.c core.h core.c $(H_SUBTOOL) $(C_SUBTOOL) +enhance: enhance.c core.h core.c $(H_SUBTOOL) $(C_SUBTOOL) $(H_PNG) $(CC) $(CF) -o enhance enhance.c core.c $(C_SUBTOOL) $(L_IL) -$(STANDALONE): %: standalone-%.c %.c %.h core.c core.h +$(STANDALONE): %: standalone-%.c %.c %.h core.c core.h $(H_PNG) $(CC) $(CF) -o $@ standalone-$*.c $*.c core.c $(L_IL) $(C_STANDALONE): standalone-%.c: settings-standalone.txt standalone.c $(CONFIGURE) subtool=$* settings-standalone.txt --in standalone.c --out $@ +$(TO_GENERATE): $(GENERATE_FROM) $(CONFIGFILE) + $(CONFIGURE_CMD) --in $(GENERATE_FROM) --out $(TO_GENERATE) + +$(H_PNG): %.h: %.png f2h + ./f2h $* $*.png $@ + +f2h: f2h.c + $(CC) $(CF) -o f2h f2h.c + #test: test.c core.h core.c # $(CC) $(CF) -o test test.c core.c $(LF) clean: - $(RM) -f enhance $(C_STANDALONE) $(STANDALONE) + $(RM) -f enhance $(C_STANDALONE) $(STANDALONE) $(TO_GENERATE) f2h $(H_PNG) PHONY: all clean diff --git a/makefile.1.mak b/makefile.1.mak index fd5f631..169e127 100644 --- a/makefile.1.mak +++ b/makefile.1.mak @@ -42,28 +42,45 @@ nofading\ info\ bluenh\ reveal\ -diff +diff\ +npb C_STANDALONE=\ standalone-nofading.c\ standalone-info.c\ standalone-bluenh.c\ standalone-reveal.c\ -standalone-diff.c +standalone-diff.c\ +standalone-npb.c C_SUBTOOL=\ nofading.c\ info.c\ bluenh.c\ reveal.c\ -diff.c +diff.c\ +npb.c H_SUBTOOL=\ nofading.h\ info.h\ bluenh.h\ reveal.h\ -diff.h +diff.h\ +npb.h + +H_PNG=\ +npb0.h\ +npb1.h\ +npb2.h\ +npb_ong1.h\ +npb_403.h + +# keep these 2 lists in the same order!: +GENERATE_FROM= + +TO_GENERATE= + #all: 403 npb npbd npb-ong1 npbd-ong1 bluenh bluenhd insert extract seediff insertframe mremapt-1 compare nofading nofadingd @@ -74,21 +91,30 @@ makefile: makefile.1.mak $(CONFIGFILE) $(CONFIGURE_CMD) < makefile.1.mak > makefile -enhance: enhance.c core.h core.c $(H_SUBTOOL) $(C_SUBTOOL) +enhance: enhance.c core.h core.c $(H_SUBTOOL) $(C_SUBTOOL) $(H_PNG) $(CC) $(CF) -o enhance enhance.c core.c $(C_SUBTOOL) $(L_IL) -$(STANDALONE): %: standalone-%.c %.c %.h core.c core.h +$(STANDALONE): %: standalone-%.c %.c %.h core.c core.h $(H_PNG) $(CC) $(CF) -o $@ standalone-$*.c $*.c core.c $(L_IL) $(C_STANDALONE): standalone-%.c: settings-standalone.txt standalone.c $(CONFIGURE) subtool=$* settings-standalone.txt --in standalone.c --out $@ +$(TO_GENERATE): $(GENERATE_FROM) $(CONFIGFILE) + $(CONFIGURE_CMD) --in $(GENERATE_FROM) --out $(TO_GENERATE) + +$(H_PNG): %.h: %.png f2h + ./f2h $* $*.png $@ + +f2h: f2h.c + $(CC) $(CF) -o f2h f2h.c + #test: test.c core.h core.c # $(CC) $(CF) -o test test.c core.c $(LF) clean: - $(RM) -f enhance $(C_STANDALONE) $(STANDALONE) + $(RM) -f enhance $(C_STANDALONE) $(STANDALONE) $(TO_GENERATE) f2h $(H_PNG) PHONY: all clean diff --git a/nofading.c b/nofading.c index 877eaf4..acd888f 100644 --- a/nofading.c +++ b/nofading.c @@ -1,7 +1,7 @@ /* nofading.c The tool to remove fading from an image -15.11.2022 +29.11.2022 Copyright (C) 2015, 2022 Balthasar SzczepaÅski @@ -251,7 +251,7 @@ int find_fading_range (ILuint n, struct PixelInfo *p, void *data) d = data; - if (p->flags & IS_GRAY) + if (p->flags & EFF_GRAY) { UPDATE_RANGE(p->value, d->green_low, d->green_high); } @@ -267,7 +267,7 @@ int find_fading_range (ILuint n, struct PixelInfo *p, void *data) UPDATE_RANGE(p->green, d->green_low, d->green_high); UPDATE_RANGE(p->blue, d->green_low, d->green_high); } - if ((p->flags & HAS_ALPHA) && (d->enhance_alpha)) + if ((p->flags & EFF_ALPHA) && (d->enhance_alpha)) { UPDATE_RANGE(p->alpha, d->alpha_low, d->alpha_high); } @@ -292,7 +292,7 @@ int enhance_fading (ILuint n, struct PixelInfo *p, void *data) d = data; - if (p->flags & IS_GRAY) + if (p->flags & EFF_GRAY) p->value = enhance_fading_1ch(p->value, d->green_low, d->green_high, d->max); else if (d->individual_channels) { @@ -306,7 +306,7 @@ int enhance_fading (ILuint n, struct PixelInfo *p, void *data) p->green = enhance_fading_1ch(p->green, d->green_low, d->green_high, d->max); p->blue = enhance_fading_1ch(p->blue , d->green_low, d->green_high, d->max); } - if ((p->flags & HAS_ALPHA) && (d->enhance_alpha)) + if ((p->flags & EFF_ALPHA) && (d->enhance_alpha)) p->alpha = enhance_fading_1ch(p->alpha, d->alpha_low, d->alpha_high, d->max); return 0; diff --git a/npb.cpp b/npb.c similarity index 64% rename from npb.cpp rename to npb.c index a08e577..1c03b99 100644 --- a/npb.cpp +++ b/npb.c @@ -1,11 +1,183 @@ - // //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 +/* +npb.c +Take a picture and add a newpixbot to it! +29.11.2022 + +Copyright (C) 2013 - 2015, 2022 Balthasar SzczepaÅski + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + + +Requires Dev Image Library (libdevil) (http://openil.sourceforge.net/) +on Pentium III libdevil must be recompiled with +--disable-ssl2 --disable-ssl3 +(https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=572954) + +*/ + +#include <stdint.h> +#include <getopt.h> + +#include "core.h" +#include "npb.h" + +#include "npb0.h" +#include "npb1.h" +#include "npb2.h" +#include "npb_ong1.h" +#include "npb_403.h" + +#define NPB0_L 21 +#define NPB0_R 116 +#define NPB0_T 122 +#define NPB0_B 189 + +#define NPB1_L 22 +#define NPB1_R 154 +#define NPB1_T 69 +#define NPB1_B 162 + + +char NPB_MISSING_ARGS[] = "Missing parameters.\nnpb [-o -4 -r -b -c] inPix outPix\n"; + +int subtool_npb (int argc, char **argv, int argi, char **err) +{ + uint_fast8_t ong1 = 0; + uint_fast8_t t403 = 0; + uint_fast8_t corners = 0; + uint_fast8_t fullsize = 0; + uint_fast8_t fill_white = 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; + + ILuint cut_border = 0; + ILuint new_border = 2; + ILuint max = 0xFF; //upscale_value(0xFF, info[0].image_bpc); // bpc=1 + ILuint effective_width, effective_height; + const uint8_t *npb_pix; + uint_fast32_t npb_size; + ILuint x_l, x_r, y_t, y_b; + + struct ColorInfo color; + struct IL_full_info info[3]; + FLAG_TYPE flags [3] = { + CANNOT_BE_GRAY | CANNOT_BE_INDEXED | NOT_WRITABLE, + CANNOT_BE_GRAY | CANNOT_BE_INDEXED | NOT_WRITABLE | MUST_HAVE_ALPHA, + CANNOT_BE_GRAY | CANNOT_BE_INDEXED | NOT_READABLE | MUST_HAVE_ALPHA, + } + ILuint x0[3]; + ILuint y0[3]; + + 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} + }; + char short_options[] = "o4r:b:ch"; + + int opt; + int r; + + optind = argi; + while ((opt = getopt_long(argc, argv, short_options, long_options, NULL)) != -1) + { + switch (opt) + { + case 'o': + ong1 = 1; + break; + case '4': + t403 = 1; + break; + case 'r': + sscanf(optarg, "%lu, &cut_border); + break; + case 'b': + sscanf(optarg, "%lu, &new_border); + fullsize = 1; + break; + case 'c': + corners = 1; + break; + case 'h': + /* help */ + break; + } + } + + if (argc < optind + 2) + { + *err = NPB_MISSING_ARGS; + return EINVAL; + } + + r = reserve_pictures(1); + if (r) + { + *err = CREATE_FAILED; + return r; + } + + r = load_picture(0, argv[optind], &(info[0]), &(flags[0]); + if (r) + { + *err = LOAD_FAILED; + return r; + } + + effective_width = (info[0].image_width > (2*cut_border)) ? (info[0].image_width - (2*cut_border)) : 0; + effective_height = (info[0].image_height > (2*cut_border)) ? (info[0].image_height - (2*cut_border)) : 0; + + if (t403) + { + npb_pix = npb_403; + npb_size = npb_403_size; + } + else if (ong1) + { + npb_pix = npb_ong1; + npb_size = npb_ong1_size; + } + else if ((effective_width <= NPB0_X_MAX) && (effective_height <= NPB0_Y_MAX) && (!fullsize)) + { + npb_pix = npb0; + npb_size = npb0_size; + fill_white = 1; + new_border = 0; + } + else if ((effective_width <= NPB1_X_MAX) && (effective_height <= NPB1_Y_MAX) && (!fullsize)) + { + npb_pix = npb1; + npb_size = npb1_size; + fill_white = 1; + new_border = 0; + } + else + { + npb_pix = npb2; + npb_size = npb2_size; + } + + +} #define INPIX_MUSTARD 1 #define OUTPIX_MUSTARD 2 @@ -322,4 +494,4 @@ void mustard(int mustard) ilDeleteImages(1, &npbPix); exit(mustard); } - + */ diff --git a/npb.h b/npb.h new file mode 100644 index 0000000..c2c95f3 --- /dev/null +++ b/npb.h @@ -0,0 +1,28 @@ +/* +npb.h +Take a picture and add a newpixbot to it! +29.11.2022 + +Copyright (C) 2022 Balthasar SzczepaÅski + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. + + +Requires Dev Image Library (libdevil) (http://openil.sourceforge.net/) +on Pentium III libdevil must be recompiled with +--disable-ssl2 --disable-ssl3 +(https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=572954) +*/ + +int subtool_npb (int argc, char **argv, int argi, char **err); diff --git a/npb_403.png b/npb_403.png new file mode 100644 index 0000000000000000000000000000000000000000..326a1982fdee0a7753b2ef2507fa5fd4f0ce4eab GIT binary patch literal 15489 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 UlyBpo6#S9BsBj_W+>O8f7v2&_V*mgE literal 0 HcmV?d00001 diff --git a/npb_ong1.png b/npb_ong1.png new file mode 100644 index 0000000000000000000000000000000000000000..2ef8a15b7ac0fc5f0c9ed0308610c69bfdc10908 GIT binary patch literal 6366 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	dpnmz-{~v1zCR0 z1VR*ZTn4n-T50?jFpH11--@FvJ{(<n&2by#vXK@-1C;hq8$_+QesqIsc9dP?&c%&T zfVzyT;;CCL)=X{w!br)eT@+n$a+cLrGQncuDJ6)eQF1HpQvFZmJxA*m+*>K7S5VRx zgnPJ%KQG&V3NIZxWrccd464elaCEUaSctp6&O+OdX}skMrw;CyBKNl7ALWl7xC=d= z0}d4F33-fCaC(yj?QYliqx7v{5YWbWdxf#&KI6dd!olrAhCu_(YWoF&Co1QOzxK=> z?kM73k*&2x@Vkuk7#1eUdp_esUl<Yh;`JoQ?>frX<KK4S;6h&~dKQ@x*A`fJeW0ns zT`o@?hOq_!_I*@Mo9m!|Rn)F==2pVK&z6Z1j>{ARIg@>#Efe83*zdSP+U~EPVu1Ru z!KC9}sr`Q3SNxY8ZgDZX_`M%Dz8{Rf-Tv5(OJkMzM+N&oA6KP`@0}Ib1GtHaI)Iah zzq2>Urp%ciiY_F;iM)cPbmC~~Gpgr(j5%M*(dT{0nl9+Kd1`Tjj9=|*=ZlAaTl`bL zC_@FJO>ZPE6$OJA_Y0(Sd<Jv<12d>Kk1ejnX_*s@6V|uP-7Jthcu!c0GJn${CqMCe zIR)q2mts!A>DP_Mb8wKKHV|hl?Bl6~_Q>o6T<#Ob(Ae5Da8>(N1Ca|*M-`=gmLpO% zixKX2kfz(4Xbh7({C{!CDgTm3N_7Pe`IYTM-=P1;KUiBM^Ns|hPR}Da)_y&R>QMRR z6t?yQWixB4n@A>Ma>!2K^|JfTjJ^-m&|_i%f95|c&^GQ~+A_xc#DDXMC@@mdcE2M3 z8tEqG>n{2i=GbBX_Fd*9eEsb95uTpE{N9hF8po@7=!+_W2XI8wFX_HwE*J0C6MDk6 zFC7OjlRx0-@<%>8&CNLN5BMfdcVs(NV`R7D0Imcb;iV{?`$M<_sEwt&Q$T|~hQo=A z&(8C&ql3j@$44C>X8*;h_H@9d6ew8_SKFhw<dg1hJ(abO{4h>*nQLk3{q<uwnM9Yl z7L80s!~;u_YDtHvj}OSBxAI4DW$5EB`9}W<IN#w`UaOwRDf$*(hl9g7*~3*-Fh7Dz zS-P(NTES5q^<>EoSLR-{131^@x7#09R?_6b0lgDWBCfk}LU*X(e#E0ReOzt=JAw<Y z(e#Cr4#$8WlFqpS4vy6X(5QreeZ+}QFOP(>Dg{9w>g#ao2#s($f4<_@ZAHfdccFu& z-u{!S6haDv4mqBL`wg5tDN$@aT!0gCtY(cq5BFuk=tEv)7#=tI_Ov+(SLOikG+ZI` zvm2-3sLNHKR=X=WKj?u+W<d_vpH^99`Gn`RN?=6|{ct@CSI}o%PMf+*eqrFm8ZW?k gvb9_F<=_1Ce>pDbOmFm)sQ>@~07*qoM6N<$f>5(bxc~qF literal 0 HcmV?d00001 diff --git a/reveal.c b/reveal.c index f4769bb..8e7adde 100644 --- a/reveal.c +++ b/reveal.c @@ -1,7 +1,7 @@ /* reveal.c reveal hidden details -15.11.2022 +29.11.2022 Copyright (C) 2014 - 2019, 2022 Balthasar SzczepaÅski @@ -91,7 +91,7 @@ int subtool_reveal (int argc, char **argv, int argi, char **err) int reveal (ILuint n, struct PixelInfo *p, void *data) { - if (p->flags & IS_GRAY) + if (p->flags & EFF_GRAY) p->value = reveal_swap2(p->value); else { -- 2.30.2