diff --git a/.gitignore b/.gitignore index 5632aea..9326ae0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ yaitaa +yaitaa.exe +prepared.png obj/*.o diff --git a/src/colors.c b/src/colors.c index 7c446e8..0807f65 100644 --- a/src/colors.c +++ b/src/colors.c @@ -18,58 +18,58 @@ palette_t c_palette_256 = { palette_t c_palette_ansi_discord = { .n_colors = 8, .palette = { - { 0x4f, 0x54, 0x5c, 0 }, - { 0xd1, 0x31, 0x35, 0 }, - { 0x85, 0x99, 0x00, 0 }, - { 0xb5, 0x89, 0x00, 0 }, - { 0x26, 0x8b, 0xd2, 0 }, - { 0xd3, 0x36, 0x82, 0 }, - { 0xd3, 0x36, 0x82, 0 }, - { 0xff, 0xff, 0xff, 0 }, + { 0x4f, 0x54, 0x5c, 255 }, + { 0xd1, 0x31, 0x35, 255 }, + { 0x85, 0x99, 0x00, 255 }, + { 0xb5, 0x89, 0x00, 255 }, + { 0x26, 0x8b, 0xd2, 255 }, + { 0xd3, 0x36, 0x82, 255 }, + { 0xd3, 0x36, 0x82, 255 }, + { 0xff, 0xff, 0xff, 255 }, } }; palette_t c_palette_ansi_vga = { .n_colors = 16, .palette = { - { 0, 0, 0, 0 }, - { 170, 0, 0, 0 }, - { 0, 170, 0, 0 }, - { 170, 85, 0, 0 }, - { 0, 0, 170, 0 }, - { 170, 0, 170, 0 }, - { 0, 170, 170, 0 }, - { 170, 170, 170, 0 }, - { 85, 85, 85, 0 }, - { 255, 85, 85, 0 }, - { 85, 255, 85, 0 }, - { 255, 255, 85, 0 }, - { 85, 85, 255, 0 }, - { 255, 85, 255, 0 }, - { 85, 255, 255, 0 }, - { 255, 255, 255, 0 } + { 0, 0, 0, 255 }, + { 170, 0, 0, 255 }, + { 0, 170, 0, 255 }, + { 170, 85, 0, 255 }, + { 0, 0, 170, 255 }, + { 170, 0, 170, 255 }, + { 0, 170, 170, 255 }, + { 170, 170, 170, 255 }, + { 85, 85, 85, 255 }, + { 255, 85, 85, 255 }, + { 85, 255, 85, 255 }, + { 255, 255, 85, 255 }, + { 85, 85, 255, 255 }, + { 255, 85, 255, 255 }, + { 85, 255, 255, 255 }, + { 255, 255, 255, 255 } } }; palette_t c_palette_ansi_xterm = { .n_colors = 16, .palette = { - { 0, 0, 0, 0 }, - { 205, 0, 0, 0 }, - { 0, 205, 0, 0 }, - { 205, 205, 0, 0 }, - { 0, 0, 238, 0 }, - { 205, 0, 205, 0 }, - { 0, 205, 205, 0 }, - { 229, 229, 229, 0 }, - { 127, 127, 127, 0 }, - { 255, 0, 0, 0 }, - { 0, 255, 0, 0 }, - { 255, 255, 0, 0 }, - { 0, 0, 252, 0 }, - { 255, 0, 255, 0 }, - { 0, 255, 255, 0 }, - { 255, 255, 255, 0 }, + { 0, 0, 0, 255 }, + { 205, 0, 0, 255 }, + { 0, 205, 0, 255 }, + { 205, 205, 0, 255 }, + { 0, 0, 238, 255 }, + { 205, 0, 205, 255 }, + { 0, 205, 205, 255 }, + { 229, 229, 229, 255 }, + { 127, 127, 127, 255 }, + { 255, 0, 0, 255 }, + { 0, 255, 0, 255 }, + { 255, 255, 0, 255 }, + { 0, 0, 252, 255 }, + { 255, 0, 255, 255 }, + { 0, 255, 255, 255 }, + { 255, 255, 255, 255 }, } }; @@ -89,7 +89,7 @@ int closest_color(palette_t pal, rgba8 color) { rgba8 pal_color = pal.palette[i]; int32_t distance = color_difference(pal_color, color); - if (distance < min_distance) + if (distance <= min_distance) { min_distance = distance; nearest = i; @@ -102,7 +102,9 @@ rgba8 pal256_to_rgb(palette_t pal, int ndx) { (void)pal; rgba8 out = { 0, 0, 0, 255 }; - if (ndx >= 232) + if (ndx < 16) + return pal.palette[ndx]; + else if (ndx >= 232) { int l = (ndx - 232) * 255 / 24; out.r = out.g = out.b = l; diff --git a/src/image.c b/src/image.c index ac36ef9..13f0189 100644 --- a/src/image.c +++ b/src/image.c @@ -23,10 +23,17 @@ image_t *image_resize(image_t *img, int width, int height) res->width = width; res->height = height; res->pixels = calloc(width * height, sizeof(rgba8)); - stbir_resize_uint8((const unsigned char *)img->pixels, - img->width, img->height, 0, - (unsigned char *)res->pixels, - res->width, res->height, 0, STBI_rgb_alpha); + if (img->width != width && img->height != height) + { + stbir_resize_uint8((const unsigned char *)img->pixels, + img->width, img->height, 0, + (unsigned char *)res->pixels, + res->width, res->height, 0, STBI_rgb_alpha); + } + else + { + memcpy(res->pixels, img->pixels, width * height * sizeof(rgba8)); + } return res; } diff --git a/src/main.c b/src/main.c index 5c379ac..89da85f 100644 --- a/src/main.c +++ b/src/main.c @@ -30,17 +30,32 @@ int main(int argc, char **argv) int res = parse_args(argc, argv, &args); if (res == 1) return 0; if (res < 0) return -res; - + asc_state_t state; res = prepare_state(argc, argv, args, &state); if (res == 1) return 0; if (res < 0) return -res; - + + if (args.verbose) + { + fprintf(stderr, "Source image size: %dx%d\n", + state.source_image->width, + state.source_image->height); + } + asc_handler_t handler = asc_handlers[args.mode]; if (handler.prepare == NULL) c_fatal(12, "this mode is not implemented yet"); - + handler.prepare(&state); + + if (args.verbose) + { + fprintf(stderr, "Resized image size: %dx%d\n", + state.image->width, + state.image->height); + } + handler.main(state); return 0; }