Fixed issue with 256 colors palette
I wasn't checking for color indices <16 so first 16 colors in palette were completely wrong and that was causing wrong indices to be calculated.
This commit is contained in:
parent
c9807d3e64
commit
21e7310ae1
|
@ -1,2 +1,4 @@
|
||||||
yaitaa
|
yaitaa
|
||||||
|
yaitaa.exe
|
||||||
|
prepared.png
|
||||||
obj/*.o
|
obj/*.o
|
||||||
|
|
86
src/colors.c
86
src/colors.c
|
@ -18,58 +18,58 @@ palette_t c_palette_256 = {
|
||||||
palette_t c_palette_ansi_discord = {
|
palette_t c_palette_ansi_discord = {
|
||||||
.n_colors = 8,
|
.n_colors = 8,
|
||||||
.palette = {
|
.palette = {
|
||||||
{ 0x4f, 0x54, 0x5c, 0 },
|
{ 0x4f, 0x54, 0x5c, 255 },
|
||||||
{ 0xd1, 0x31, 0x35, 0 },
|
{ 0xd1, 0x31, 0x35, 255 },
|
||||||
{ 0x85, 0x99, 0x00, 0 },
|
{ 0x85, 0x99, 0x00, 255 },
|
||||||
{ 0xb5, 0x89, 0x00, 0 },
|
{ 0xb5, 0x89, 0x00, 255 },
|
||||||
{ 0x26, 0x8b, 0xd2, 0 },
|
{ 0x26, 0x8b, 0xd2, 255 },
|
||||||
{ 0xd3, 0x36, 0x82, 0 },
|
{ 0xd3, 0x36, 0x82, 255 },
|
||||||
{ 0xd3, 0x36, 0x82, 0 },
|
{ 0xd3, 0x36, 0x82, 255 },
|
||||||
{ 0xff, 0xff, 0xff, 0 },
|
{ 0xff, 0xff, 0xff, 255 },
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
palette_t c_palette_ansi_vga = {
|
palette_t c_palette_ansi_vga = {
|
||||||
.n_colors = 16,
|
.n_colors = 16,
|
||||||
.palette = {
|
.palette = {
|
||||||
{ 0, 0, 0, 0 },
|
{ 0, 0, 0, 255 },
|
||||||
{ 170, 0, 0, 0 },
|
{ 170, 0, 0, 255 },
|
||||||
{ 0, 170, 0, 0 },
|
{ 0, 170, 0, 255 },
|
||||||
{ 170, 85, 0, 0 },
|
{ 170, 85, 0, 255 },
|
||||||
{ 0, 0, 170, 0 },
|
{ 0, 0, 170, 255 },
|
||||||
{ 170, 0, 170, 0 },
|
{ 170, 0, 170, 255 },
|
||||||
{ 0, 170, 170, 0 },
|
{ 0, 170, 170, 255 },
|
||||||
{ 170, 170, 170, 0 },
|
{ 170, 170, 170, 255 },
|
||||||
{ 85, 85, 85, 0 },
|
{ 85, 85, 85, 255 },
|
||||||
{ 255, 85, 85, 0 },
|
{ 255, 85, 85, 255 },
|
||||||
{ 85, 255, 85, 0 },
|
{ 85, 255, 85, 255 },
|
||||||
{ 255, 255, 85, 0 },
|
{ 255, 255, 85, 255 },
|
||||||
{ 85, 85, 255, 0 },
|
{ 85, 85, 255, 255 },
|
||||||
{ 255, 85, 255, 0 },
|
{ 255, 85, 255, 255 },
|
||||||
{ 85, 255, 255, 0 },
|
{ 85, 255, 255, 255 },
|
||||||
{ 255, 255, 255, 0 }
|
{ 255, 255, 255, 255 }
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
palette_t c_palette_ansi_xterm = {
|
palette_t c_palette_ansi_xterm = {
|
||||||
.n_colors = 16,
|
.n_colors = 16,
|
||||||
.palette = {
|
.palette = {
|
||||||
{ 0, 0, 0, 0 },
|
{ 0, 0, 0, 255 },
|
||||||
{ 205, 0, 0, 0 },
|
{ 205, 0, 0, 255 },
|
||||||
{ 0, 205, 0, 0 },
|
{ 0, 205, 0, 255 },
|
||||||
{ 205, 205, 0, 0 },
|
{ 205, 205, 0, 255 },
|
||||||
{ 0, 0, 238, 0 },
|
{ 0, 0, 238, 255 },
|
||||||
{ 205, 0, 205, 0 },
|
{ 205, 0, 205, 255 },
|
||||||
{ 0, 205, 205, 0 },
|
{ 0, 205, 205, 255 },
|
||||||
{ 229, 229, 229, 0 },
|
{ 229, 229, 229, 255 },
|
||||||
{ 127, 127, 127, 0 },
|
{ 127, 127, 127, 255 },
|
||||||
{ 255, 0, 0, 0 },
|
{ 255, 0, 0, 255 },
|
||||||
{ 0, 255, 0, 0 },
|
{ 0, 255, 0, 255 },
|
||||||
{ 255, 255, 0, 0 },
|
{ 255, 255, 0, 255 },
|
||||||
{ 0, 0, 252, 0 },
|
{ 0, 0, 252, 255 },
|
||||||
{ 255, 0, 255, 0 },
|
{ 255, 0, 255, 255 },
|
||||||
{ 0, 255, 255, 0 },
|
{ 0, 255, 255, 255 },
|
||||||
{ 255, 255, 255, 0 },
|
{ 255, 255, 255, 255 },
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -89,7 +89,7 @@ int closest_color(palette_t pal, rgba8 color)
|
||||||
{
|
{
|
||||||
rgba8 pal_color = pal.palette[i];
|
rgba8 pal_color = pal.palette[i];
|
||||||
int32_t distance = color_difference(pal_color, color);
|
int32_t distance = color_difference(pal_color, color);
|
||||||
if (distance < min_distance)
|
if (distance <= min_distance)
|
||||||
{
|
{
|
||||||
min_distance = distance;
|
min_distance = distance;
|
||||||
nearest = i;
|
nearest = i;
|
||||||
|
@ -102,7 +102,9 @@ rgba8 pal256_to_rgb(palette_t pal, int ndx)
|
||||||
{
|
{
|
||||||
(void)pal;
|
(void)pal;
|
||||||
rgba8 out = { 0, 0, 0, 255 };
|
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;
|
int l = (ndx - 232) * 255 / 24;
|
||||||
out.r = out.g = out.b = l;
|
out.r = out.g = out.b = l;
|
||||||
|
|
15
src/image.c
15
src/image.c
|
@ -23,10 +23,17 @@ image_t *image_resize(image_t *img, int width, int height)
|
||||||
res->width = width;
|
res->width = width;
|
||||||
res->height = height;
|
res->height = height;
|
||||||
res->pixels = calloc(width * height, sizeof(rgba8));
|
res->pixels = calloc(width * height, sizeof(rgba8));
|
||||||
stbir_resize_uint8((const unsigned char *)img->pixels,
|
if (img->width != width && img->height != height)
|
||||||
img->width, img->height, 0,
|
{
|
||||||
(unsigned char *)res->pixels,
|
stbir_resize_uint8((const unsigned char *)img->pixels,
|
||||||
res->width, res->height, 0, STBI_rgb_alpha);
|
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;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
21
src/main.c
21
src/main.c
|
@ -30,17 +30,32 @@ int main(int argc, char **argv)
|
||||||
int res = parse_args(argc, argv, &args);
|
int res = parse_args(argc, argv, &args);
|
||||||
if (res == 1) return 0;
|
if (res == 1) return 0;
|
||||||
if (res < 0) return -res;
|
if (res < 0) return -res;
|
||||||
|
|
||||||
asc_state_t state;
|
asc_state_t state;
|
||||||
res = prepare_state(argc, argv, args, &state);
|
res = prepare_state(argc, argv, args, &state);
|
||||||
if (res == 1) return 0;
|
if (res == 1) return 0;
|
||||||
if (res < 0) return -res;
|
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];
|
asc_handler_t handler = asc_handlers[args.mode];
|
||||||
if (handler.prepare == NULL)
|
if (handler.prepare == NULL)
|
||||||
c_fatal(12, "this mode is not implemented yet");
|
c_fatal(12, "this mode is not implemented yet");
|
||||||
|
|
||||||
handler.prepare(&state);
|
handler.prepare(&state);
|
||||||
|
|
||||||
|
if (args.verbose)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Resized image size: %dx%d\n",
|
||||||
|
state.image->width,
|
||||||
|
state.image->height);
|
||||||
|
}
|
||||||
|
|
||||||
handler.main(state);
|
handler.main(state);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue