Mercurial > hg > dmlib
diff tools/libgfx.c @ 1886:1af79412f249
Remove the stdio FILE support from libgfx API, now only DMResource is supported.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Mon, 25 Jun 2018 13:52:20 +0300 |
parents | 73545a442ffe |
children | 297aa8f0ca7f |
line wrap: on
line diff
--- a/tools/libgfx.c Mon Jun 25 13:24:50 2018 +0300 +++ b/tools/libgfx.c Mon Jun 25 13:52:20 2018 +0300 @@ -299,6 +299,54 @@ } +#define DMCOL(x) (((x) >> 4) & 0xf) + +int dmWriteIFFMasterRAWHeader( + DMResource *fp, const char *filename, const char *prefix, + const DMImage *img, const DMImageConvSpec *spec, const int fmtid) +{ + dmfprintf(fp, + "%s_width: dw.w %d\n" + "%s_height: dw.w %d\n" + "%s_nplanes: dw.w %d\n", + prefix, img->width * spec->scaleX, + prefix, img->height * spec->scaleY, + prefix, spec->nplanes); + + if (fmtid == DM_IMGFMT_ARAW) + { + dmfprintf(fp, + "%s_ncolors: dw.w %d\n" + "%s_palette:\n", + prefix, img->ncolors, + prefix); + + for (int i = 0; i < (1 << spec->nplanes); i++) + { + Uint32 color; + if (i < img->ncolors) + { + color = (DMCOL(img->pal[i].r) << 8) | + (DMCOL(img->pal[i].g) << 4) | + (DMCOL(img->pal[i].b)); + } + else + color = 0; + + dmfprintf(fp, + "\tdc.w $%04X\n", + color); + } + + dmfprintf(fp, + "%s: incbin \"%s\"\n", + prefix, filename); + } + + return dmferror(fp); +} + + static BOOL dmWriteRAWRow(DMBitStreamContext *bs, const DMImage *img, const DMImageConvSpec *spec, const int yc, const int plane) { const Uint8 *sp = img->data + (yc * img->pitch); @@ -312,7 +360,7 @@ } -int dmWriteRAWImageFILE(DMResource *fp, const DMImage *img, const DMImageConvSpec *spec) +int dmWriteRAWImage(DMResource *fp, const DMImage *img, const DMImageConvSpec *spec) { int res; DMBitStreamContext bs; @@ -348,25 +396,6 @@ } -int dmWriteRAWImage(const char *filename, const DMImage *img, const DMImageConvSpec *spec) -{ - DMResource *fp; - int res; - - if ((res = dmf_open_stdio(filename, "wb", &fp)) != DMERR_OK) - { - return dmError(res, - "RAW: Could not open file '%s' for writing.\n", - filename); - } - - res = dmWriteRAWImageFILE(fp, img, spec); - - dmf_close(fp); - return res; -} - - static int dmWritePPMRow(void *cbdata, const Uint8 *row, const size_t len) { if (dmf_write_str((DMResource *) cbdata, row, len)) @@ -376,7 +405,7 @@ } -int dmWritePPMImageFILE(DMResource *fp, const DMImage *img, const DMImageConvSpec *spec) +int dmWritePPMImage(DMResource *fp, const DMImage *img, const DMImageConvSpec *spec) { DMImageConvSpec tmpSpec; @@ -399,26 +428,6 @@ } -int dmWritePPMImage(const char *filename, const DMImage *img, const DMImageConvSpec *spec) -{ - DMResource *fp; - int res; - - // Create output file - if ((res = dmf_open_stdio(filename, "wb", &fp)) != DMERR_OK) - { - return dmError(res, - "PPM: could not open file '%s' for writing.\n", - filename); - } - - res = dmWritePPMImageFILE(fp, img, spec); - - dmf_close(fp); - return res; -} - - #ifdef DM_USE_LIBPNG static int fmtProbePNG(const Uint8 *buf, const size_t len) { @@ -466,7 +475,7 @@ } -int dmWritePNGImageFILE(DMResource *fp, const DMImage *img, const DMImageConvSpec *spec) +int dmWritePNGImage(DMResource *fp, const DMImage *img, const DMImageConvSpec *spec) { png_structp png_ptr = NULL; png_infop info_ptr = NULL; @@ -574,25 +583,6 @@ } -int dmWritePNGImage(const char *filename, const DMImage *img, const DMImageConvSpec *spec) -{ - int res; - DMResource *fp; - - if ((res = dmf_open_stdio(filename, "wb", &fp)) != DMERR_OK) - { - return dmError(res, - "PNG: could not open file '%s' for writing.\n", - filename); - } - - res = dmWritePNGImageFILE(fp, img, spec); - - dmf_close(fp); - return res; -} - - void dmPNGReadData(png_structp png_ptr, png_bytep data, png_size_t length) { DMResource *res = (DMResource *) png_get_io_ptr(png_ptr); @@ -601,7 +591,8 @@ dmf_read_str(res, data, length); } -int dmReadPNGImageFILE(DMResource *fp, DMImage **pimg) + +int dmReadPNGImage(DMResource *fp, DMImage **pimg) { png_structp png_ptr = NULL; png_infop info_ptr = NULL; @@ -775,25 +766,6 @@ return res; } - - -int dmReadPNGImage(const char *filename, DMImage **img) -{ - int res; - DMResource *fp; - - if ((res = dmf_open_stdio(filename, "rb", &fp)) != DMERR_OK) - { - return dmError(res, - "PNG: Could not open file '%s' for reading.\n", - filename); - } - - res = dmReadPNGImageFILE(fp, img); - - dmf_close(fp); - return res; -} #endif @@ -944,7 +916,7 @@ } -int dmWritePCXImageFILE(DMResource *fp, const DMImage *img, const DMImageConvSpec *pspec) +int dmWritePCXImage(DMResource *fp, const DMImage *img, const DMImageConvSpec *pspec) { DMPCXData pcx; DMPCXHeader hdr; @@ -1113,25 +1085,6 @@ } -int dmWritePCXImage(const char *filename, const DMImage *img, const DMImageConvSpec *spec) -{ - DMResource *fp; - int res; - - if ((res = dmf_open_stdio(filename, "wb", &fp)) != DMERR_OK) - { - return dmError(res, - "PCX: Could not open file '%s' for writing.\n", - filename); - } - - res = dmWritePCXImageFILE(fp, img, spec); - - dmf_close(fp); - return res; -} - - static BOOL dmPCXDecodeRLERow(DMResource *fp, Uint8 *buf, const size_t bufLen) { size_t offs = 0; @@ -1188,7 +1141,7 @@ } -int dmReadPCXImageFILE(DMResource *fp, DMImage **pimg) +int dmReadPCXImage(DMResource *fp, DMImage **pimg) { DMImage *img; DMPCXData pcx; @@ -1419,25 +1372,6 @@ } -int dmReadPCXImage(const char *filename, DMImage **pimg) -{ - DMResource *fp; - int res; - - if ((res = dmf_open_stdio(filename, "rb", &fp)) != DMERR_OK) - { - return dmError(res, - "PCX: Could not open file '%s' for reading.\n", - filename); - } - - res = dmReadPCXImageFILE(fp, pimg); - - dmf_close(fp); - return res; -} - - // // IFF ILBM / PBM format // @@ -1744,7 +1678,7 @@ } -int dmReadILBMImageFILE(DMResource *fp, DMImage **pimg) +int dmReadILBMImage(DMResource *fp, DMImage **pimg) { DMIFFChunk chunk; DMIFF iff; @@ -1997,25 +1931,6 @@ } -int dmReadILBMImage(const char *filename, DMImage **pimg) -{ - DMResource *fp; - int res; - - if ((res = dmf_open_stdio(filename, "rb", &fp)) != DMERR_OK) - { - return dmError(res, - "ILBM: Could not open file '%s' for reading.\n", - filename); - } - - res = dmReadILBMImageFILE(fp, pimg); - - dmf_close(fp); - return res; -} - - // // List of formats // @@ -2025,45 +1940,34 @@ { "png", "Portable Network Graphics", DM_IMGFMT_PNG, DM_FMT_RDWR, - fmtProbePNG, - dmReadPNGImage, dmReadPNGImageFILE, - dmWritePNGImage, dmWritePNGImageFILE, + fmtProbePNG, dmReadPNGImage, dmWritePNGImage, }, #endif { "ppm", "Portable PixMap", DM_IMGFMT_PPM, DM_FMT_WR, - NULL, - NULL, NULL, - dmWritePPMImage, dmWritePPMImageFILE, + NULL, NULL, dmWritePPMImage, }, { "pcx", "Z-Soft Paintbrush", DM_IMGFMT_PCX, DM_FMT_RDWR, - fmtProbePCX, - dmReadPCXImage, dmReadPCXImageFILE, - dmWritePCXImage, dmWritePCXImageFILE, + fmtProbePCX, dmReadPCXImage, dmWritePCXImage, }, { "ilbm", "IFF ILBM / PBM", - DM_IMGFMT_ILBM, DM_FMT_RD, - fmtProbeILBM, - dmReadILBMImage, dmReadILBMImageFILE, - NULL, NULL, + DM_IMGFMT_ILBM, DM_FMT_RDWR, + fmtProbeILBM, dmReadILBMImage, + NULL, }, { "raw", "Plain bitplaned (planar or non-planar) RAW", DM_IMGFMT_RAW, DM_FMT_WR, - NULL, - NULL, NULL, - dmWriteRAWImage, dmWriteRAWImageFILE, + NULL, NULL, dmWriteRAWImage, }, { "araw", "IFFMaster Amiga RAW", DM_IMGFMT_ARAW, DM_FMT_WR, - NULL, - NULL, NULL, - dmWriteRAWImage, dmWriteRAWImageFILE, + NULL, NULL, dmWriteRAWImage, } };