Mercurial > hg > dmlib
diff gfxconv.c @ 462:ab401a5087f9
Improve ARAW output.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sun, 04 Nov 2012 16:09:07 +0200 |
parents | 0af039b6c0ae |
children | 4204e9ea8ae1 |
line wrap: on
line diff
--- a/gfxconv.c Sun Nov 04 15:41:46 2012 +0200 +++ b/gfxconv.c Sun Nov 04 16:09:07 2012 +0200 @@ -549,12 +549,59 @@ case IMGFMT_ARAW: { - int res; - char *palFilename = dm_strdup_printf("%s.pal", filename); - res = dmWriteIFFMasterRAWPalette(palFilename, image, 1 << optSpec.nplanes); - dmFree(palFilename); - if (res != DMERR_OK) - return res; + FILE *fp; + char *dataFilename, *fext, *tmpFilename = dm_strdup(filename); + + // Form data file filename + if (tmpFilename == NULL) + return DMERR_MALLOC; + + fext = strrchr(tmpFilename, '.'); + if (fext != NULL) + *fext = 0; + dataFilename = dm_strdup_printf("%s.inc", tmpFilename); + dmFree(tmpFilename); + + // Open data file for writing + if ((fp = fopen(dataFilename, "w")) == NULL) + dmError("Could not create '%s'.\n", dataFilename); + dmFree(dataFilename); + + if (fp != NULL) + { + // Strip extension + int i; + char *palID = dm_strdup_printf("img_%s", filename); + char *fext = strrchr(palID, '.'); + if (fext != NULL) + *fext = 0; + + // Replace any non-alphanumerics + for (i = 0; palID[i]; i++) + { + if (isalnum(palID[i])) + palID[i] = tolower(palID[i]); + else + palID[i] = '_'; + } + + fprintf(fp, + "%s_width: dw.w %d\n" + "%s_height: dw.w %d\n" + "%s_nplanes: dw.w %d\n" + "%s_ncolors: dw.w %d\n" + "%s_palette:\n", + palID, image->width, + palID, image->height, + palID, spec->nplanes, + palID, image->ncolors, + palID); + + dmWriteIFFMasterRAWPalette(fp, image, 1 << optSpec.nplanes, NULL, NULL); + + fclose(fp); + dmFree(palID); + } if (info) dmMsg(2, "%d bitplanes, %s interleave.\n", spec->nplanes, spec->interleave ? "with" : "without"); return dmWriteIFFMasterRAWImage(filename, image, spec);