X-Git-Url: http://git.draconx.ca/gitweb/liblbx.git/blobdiff_plain/bbcffc80c95c69d02635b02d37e78912c7f12305..e4d75d5e84c051b75bf6a81072734da22c44cb21:/src/lbximg.c diff --git a/src/lbximg.c b/src/lbximg.c index 7827a87..a2b7405 100644 --- a/src/lbximg.c +++ b/src/lbximg.c @@ -163,7 +163,6 @@ int outpng(unsigned int frameno, } if (setjmp(png_jmpbuf(png))) { - free(row); png_destroy_write_struct(&png, &info); goto err; } @@ -176,12 +175,19 @@ int outpng(unsigned int frameno, * data to libpng and let it do its magic. */ + png_color png_palette[256]; + for (unsigned i = 0; i < 256; i++) { + png_palette[i].red = palette[i].red; + png_palette[i].green = palette[i].green; + png_palette[i].blue = palette[i].blue; + } + png_set_IHDR(png, info, width, height, 8, PNG_COLOR_TYPE_PALETTE, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); - png_set_PLTE(png, info, (png_colorp)palette, 256); + png_set_PLTE(png, info, png_palette, 256); png_set_rows(png, info, framedata); png_write_png(png, info, PNG_TRANSFORM_IDENTITY, NULL); } else { @@ -214,12 +220,11 @@ int outpng(unsigned int frameno, png_destroy_write_struct(&png, &info); fclose(of); + free(row); if (verbose) printf("wrote %s\n", name); - return 0; - err: fclose(of); remove(name); @@ -281,7 +286,7 @@ static int loadpalette(LBX_IMG *img, struct lbx_imginfo *info, } /* Read the external palette, if any. */ - if (palf && lbximg_loadpalette(palf, palette) == -1) { + if (palf && lbximg_loadpalette(palf, &lbx_default_fops, palette) != 0) { errmsg("error reading external palette: %s\n", lbx_strerror()); return -1; } @@ -310,7 +315,7 @@ int decode(LBX_IMG *img, FILE *palf, FILE *override, char **argv) lbximg_getinfo(img, &info); - framebits = malloc(info.nframes / CHAR_BIT + 1); + framebits = calloc(1, info.nframes / CHAR_BIT + 1); if (!framebits) { return EXIT_FAILURE; } @@ -401,9 +406,6 @@ int main(int argc, char **argv) verbose = 1; break; case 'f': - if (strcmp(optarg, "-") == 0) - break; - name = strrchr(optarg, '/'); name = name ? name+1 : optarg; @@ -464,6 +466,7 @@ int main(int argc, char **argv) printf("%s is %ux%u LBX image, %u frame(s)%s%s\n", name, info.width, info.height, info.nframes, info.palettesz ? ", embedded palette" : "", + info.chunk ? ", chunked" : "", info.looping ? ", loops" : ""); }