Mercurial > hg > dmlib
annotate tools/libgfx.h @ 1896:f80b2dc77c30
Work begins on IFF ILBM/PBM image writer. It is pretty broken, some things
will not work and some things are hardcoded. The ByteRun1 compression
implementation is somewhat inefficient. Interleaved files do not work yet.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Tue, 26 Jun 2018 03:13:38 +0300 |
parents | cbc911ffd21e |
children | ee9bbf891352 |
rev | line source |
---|---|
435 | 1 /* |
2 * Functions for loading and saving bitmap images | |
3 * Programmed and designed by Matti 'ccr' Hamalainen | |
4 * (C) Copyright 2012 Tecnic Software productions (TNSP) | |
5 * | |
6 * Please read file 'COPYING' for information on license and distribution. | |
7 */ | |
8 #ifndef LIBMGFX_H | |
9 #define LIBMGFX_H 1 | |
10 | |
11 #include "dmlib.h" | |
1609
c29adf5ce240
Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents:
1545
diff
changeset
|
12 #include "dmres.h" |
947
5ac8f5513978
Delete useless include line.
Matti Hamalainen <ccr@tnsp.org>
parents:
929
diff
changeset
|
13 |
435 | 14 |
15 #ifdef __cplusplus | |
16 extern "C" { | |
17 #endif | |
18 | |
19 | |
20 enum | |
21 { | |
1543
416d7b3ba3b2
Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents:
1341
diff
changeset
|
22 DM_IMGFMT_PNG, |
416d7b3ba3b2
Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents:
1341
diff
changeset
|
23 DM_IMGFMT_PPM, |
416d7b3ba3b2
Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents:
1341
diff
changeset
|
24 DM_IMGFMT_PCX, |
1892
cbc911ffd21e
Rename ILBM functions to IFF, which is more approriate as we support both ILBM and PBM variants of the IFF images.
Matti Hamalainen <ccr@tnsp.org>
parents:
1886
diff
changeset
|
25 DM_IMGFMT_IFF, |
1543
416d7b3ba3b2
Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents:
1341
diff
changeset
|
26 DM_IMGFMT_RAW, |
416d7b3ba3b2
Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents:
1341
diff
changeset
|
27 DM_IMGFMT_ARAW, |
435 | 28 }; |
29 | |
30 | |
31 enum | |
32 { | |
1801 | 33 DM_COLFMT_PALETTE, |
34 DM_COLFMT_RGB, | |
35 DM_COLFMT_RGBA, | |
435 | 36 }; |
37 | |
38 | |
1544 | 39 // Error handling modes |
1285
e4bda4909d72
Make libgfx error mode a global variable, at least for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
971
diff
changeset
|
40 enum |
e4bda4909d72
Make libgfx error mode a global variable, at least for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
971
diff
changeset
|
41 { |
1544 | 42 DM_ERRMODE_FAIL = 0, |
1285
e4bda4909d72
Make libgfx error mode a global variable, at least for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
971
diff
changeset
|
43 DM_ERRMODE_RECOV_1, |
e4bda4909d72
Make libgfx error mode a global variable, at least for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
971
diff
changeset
|
44 DM_ERRMODE_RECOV_2, |
e4bda4909d72
Make libgfx error mode a global variable, at least for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
971
diff
changeset
|
45 }; |
e4bda4909d72
Make libgfx error mode a global variable, at least for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
971
diff
changeset
|
46 |
e4bda4909d72
Make libgfx error mode a global variable, at least for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
971
diff
changeset
|
47 |
1544 | 48 // Probe scores |
49 enum | |
50 { | |
51 DM_PROBE_SCORE_FALSE = 0, | |
52 DM_PROBE_SCORE_MAYBE = 250, | |
53 DM_PROBE_SCORE_AVG = 500, | |
54 DM_PROBE_SCORE_GOOD = 750, | |
55 DM_PROBE_SCORE_MAX = 1000, | |
56 }; | |
57 | |
58 | |
1545
3b613fcbf3ff
Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents:
1544
diff
changeset
|
59 // Flags for readability/writeability of formats |
3b613fcbf3ff
Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents:
1544
diff
changeset
|
60 enum |
3b613fcbf3ff
Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents:
1544
diff
changeset
|
61 { |
1759
027fb7313d85
Add a format flag for marking formats that have broken/incomplete support and use it.
Matti Hamalainen <ccr@tnsp.org>
parents:
1733
diff
changeset
|
62 DM_FMT_WR = 0x0001, // Format can be written |
027fb7313d85
Add a format flag for marking formats that have broken/incomplete support and use it.
Matti Hamalainen <ccr@tnsp.org>
parents:
1733
diff
changeset
|
63 DM_FMT_RD = 0x0002, // Format can be read |
027fb7313d85
Add a format flag for marking formats that have broken/incomplete support and use it.
Matti Hamalainen <ccr@tnsp.org>
parents:
1733
diff
changeset
|
64 DM_FMT_RDWR = (DM_FMT_RD | DM_FMT_WR), // Read and write support |
027fb7313d85
Add a format flag for marking formats that have broken/incomplete support and use it.
Matti Hamalainen <ccr@tnsp.org>
parents:
1733
diff
changeset
|
65 DM_FMT_BROKEN = 0x1000, // Support is broken/incomplete |
1545
3b613fcbf3ff
Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents:
1544
diff
changeset
|
66 }; |
3b613fcbf3ff
Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents:
1544
diff
changeset
|
67 |
3b613fcbf3ff
Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents:
1544
diff
changeset
|
68 |
1609
c29adf5ce240
Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents:
1545
diff
changeset
|
69 // Bitmapped image struct |
435 | 70 typedef struct |
71 { | |
1801 | 72 int format; // one of types specified by DM_COLFMT_* |
1286 | 73 int width, height; |
74 int pitch; // bytes per scanline | |
75 int bpp; // bits per pixel | |
76 | |
1628
a549d33d543a
Add image aspect ratio information.
Matti Hamalainen <ccr@tnsp.org>
parents:
1616
diff
changeset
|
77 float aspect; // aspect ratio (vert / horiz), <= 0 if not set |
a549d33d543a
Add image aspect ratio information.
Matti Hamalainen <ccr@tnsp.org>
parents:
1616
diff
changeset
|
78 |
1286 | 79 int ncolors; // number of colors in palette, if any |
80 int ctransp; // transparency color index | |
81 BOOL constpal; // is the palette a const? | |
82 DMColor *pal; // pointer to palette struct, NULL if no palette | |
83 | |
929
e1378398be0f
Add size field for allocated data size in DMImage.
Matti Hamalainen <ccr@tnsp.org>
parents:
902
diff
changeset
|
84 size_t size; |
435 | 85 Uint8 *data; |
86 } DMImage; | |
87 | |
88 | |
89 typedef struct | |
90 { | |
1288 | 91 int format; |
92 int scaleX, scaleY; | |
1896
f80b2dc77c30
Work begins on IFF ILBM/PBM image writer. It is pretty broken, some things
Matti Hamalainen <ccr@tnsp.org>
parents:
1892
diff
changeset
|
93 int nplanes, bpp, mask; |
1291 | 94 BOOL planar, paletted; |
1896
f80b2dc77c30
Work begins on IFF ILBM/PBM image writer. It is pretty broken, some things
Matti Hamalainen <ccr@tnsp.org>
parents:
1892
diff
changeset
|
95 int compression; |
1290
e7dc9bb9777e
Rename struct DMImageSpec to DMImageConvSpec.
Matti Hamalainen <ccr@tnsp.org>
parents:
1288
diff
changeset
|
96 } DMImageConvSpec; |
435 | 97 |
98 | |
99 typedef struct | |
100 { | |
101 char *fext; | |
1616
36d073c45327
Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
1609
diff
changeset
|
102 char *name; |
36d073c45327
Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
1609
diff
changeset
|
103 int fmtid; // DM_IMGFMT_* |
36d073c45327
Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
1609
diff
changeset
|
104 int flags; // DM_FMT_* flags |
435 | 105 int (*probe)(const Uint8 *buf, const size_t len); |
1886
1af79412f249
Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents:
1809
diff
changeset
|
106 int (*read)(DMResource *fp, DMImage **pimg); |
1af79412f249
Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents:
1809
diff
changeset
|
107 int (*write)(DMResource *fp, const DMImage *pimg, const DMImageConvSpec *spec); |
435 | 108 } DMImageFormat; |
109 | |
110 | |
1616
36d073c45327
Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
1609
diff
changeset
|
111 extern const DMImageFormat dmImageFormatList[]; |
36d073c45327
Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
1609
diff
changeset
|
112 extern const int ndmImageFormatList; |
1285
e4bda4909d72
Make libgfx error mode a global variable, at least for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
971
diff
changeset
|
113 extern int dmGFXErrorMode; |
435 | 114 |
115 | |
1286 | 116 DMImage * dmImageAlloc(const int width, const int height, const int format, const int bpp); |
435 | 117 void dmImageFree(DMImage *img); |
1286 | 118 int dmImageGetBytesPerPixel(const int format); |
1616
36d073c45327
Refactor the format handling a bit.
Matti Hamalainen <ccr@tnsp.org>
parents:
1609
diff
changeset
|
119 int dmImageProbeGeneric(const Uint8 *buf, const size_t len, const DMImageFormat **fmt, int *index); |
435 | 120 |
487
b89598501cec
Move dmCompareColor() to libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents:
462
diff
changeset
|
121 BOOL dmCompareColor(const DMColor *c1, const DMColor *c2, BOOL alpha); |
1733
59c2b08a80a6
Make some palette allocation functions public.
Matti Hamalainen <ccr@tnsp.org>
parents:
1628
diff
changeset
|
122 BOOL dmPaletteAlloc(DMColor **ppal, int ncolors, int ctransp); |
59c2b08a80a6
Make some palette allocation functions public.
Matti Hamalainen <ccr@tnsp.org>
parents:
1628
diff
changeset
|
123 BOOL dmImagePaletteAlloc(DMImage *img, int ncolors, int ctransp); |
487
b89598501cec
Move dmCompareColor() to libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents:
462
diff
changeset
|
124 |
435 | 125 |
1886
1af79412f249
Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents:
1809
diff
changeset
|
126 int dmWriteImageData(const DMImage *img, void *cbdata, |
1af79412f249
Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents:
1809
diff
changeset
|
127 int (*writeRowCB)(void *, const Uint8 *, const size_t), const DMImageConvSpec *spec); |
1af79412f249
Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents:
1809
diff
changeset
|
128 |
435 | 129 |
1886
1af79412f249
Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents:
1809
diff
changeset
|
130 int dmWriteIFFMasterRAWHeader(DMResource *fp, const char *filename, const char *prefix, const DMImage *img, const DMImageConvSpec *spec, const int fmtid); |
1af79412f249
Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents:
1809
diff
changeset
|
131 int dmWriteRAWImage(DMResource *fp, const DMImage *img, const DMImageConvSpec *spec); |
435 | 132 |
1886
1af79412f249
Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents:
1809
diff
changeset
|
133 int dmWritePPMImage(DMResource *fp, const DMImage *img, const DMImageConvSpec *spec); |
435 | 134 |
135 #ifdef DM_USE_LIBPNG | |
1886
1af79412f249
Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents:
1809
diff
changeset
|
136 int dmWritePNGImage(DMResource *fp, const DMImage *img, const DMImageConvSpec *spec); |
1af79412f249
Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents:
1809
diff
changeset
|
137 int dmReadPNGImage(DMResource *fp, DMImage **pimg); |
435 | 138 #endif |
139 | |
1886
1af79412f249
Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents:
1809
diff
changeset
|
140 int dmWritePCXImage(DMResource *fp, const DMImage *img, const DMImageConvSpec *spec); |
1af79412f249
Remove the stdio FILE support from libgfx API, now only DMResource is supported.
Matti Hamalainen <ccr@tnsp.org>
parents:
1809
diff
changeset
|
141 int dmReadPCXImage(DMResource *fp, DMImage **pimg); |
435 | 142 |
1892
cbc911ffd21e
Rename ILBM functions to IFF, which is more approriate as we support both ILBM and PBM variants of the IFF images.
Matti Hamalainen <ccr@tnsp.org>
parents:
1886
diff
changeset
|
143 int dmReadIFFImage(DMResource *fp, DMImage **pimg); |
1896
f80b2dc77c30
Work begins on IFF ILBM/PBM image writer. It is pretty broken, some things
Matti Hamalainen <ccr@tnsp.org>
parents:
1892
diff
changeset
|
144 int dmWriteIFFImage(DMResource *fp, const DMImage *img, const DMImageConvSpec *spec); |
1809
a20655e40e6c
Move ILBM function declarations to position that better reflects their
Matti Hamalainen <ccr@tnsp.org>
parents:
1801
diff
changeset
|
145 |
435 | 146 |
1309
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
147 typedef struct _DMBitStreamContext |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
148 { |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
149 void *handle; |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
150 |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
151 BOOL (*putByte)(struct _DMBitStreamContext *ctx, Uint8 val); |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
152 |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
153 int outBuf, outBitCount, outByteCount; |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
154 } DMBitStreamContext; |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
155 |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
156 |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
157 void dmInitBitStreamContext(DMBitStreamContext *ctx); |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
158 int dmFlushBitStream(DMBitStreamContext *ctx); |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
159 BOOL dmPutBits(DMBitStreamContext *ctx, const int val, const int n); |
1609
c29adf5ce240
Convert libgfx file format routines to use DMResource instead of stdio FILE.
Matti Hamalainen <ccr@tnsp.org>
parents:
1545
diff
changeset
|
160 int dmInitBitStreamFILE(DMBitStreamContext *ctx, DMResource *fp); |
1309
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
161 |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
162 |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
163 |
435 | 164 #ifdef __cplusplus |
165 } | |
166 #endif | |
167 | |
168 #endif // LIBMGFX_H |