Mercurial > hg > dmlib
annotate tools/libgfx.h @ 1545:3b613fcbf3ff
Improve how format read/write capabilities are marked and shown.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Sat, 12 May 2018 21:01:46 +0300 |
parents | 48823642c4fb |
children | c29adf5ce240 |
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" | |
947
5ac8f5513978
Delete useless include line.
Matti Hamalainen <ccr@tnsp.org>
parents:
929
diff
changeset
|
12 |
435 | 13 |
14 #ifdef __cplusplus | |
15 extern "C" { | |
16 #endif | |
17 | |
18 | |
19 enum | |
20 { | |
1543
416d7b3ba3b2
Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents:
1341
diff
changeset
|
21 DM_IMGFMT_PNG, |
416d7b3ba3b2
Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents:
1341
diff
changeset
|
22 DM_IMGFMT_PPM, |
416d7b3ba3b2
Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents:
1341
diff
changeset
|
23 DM_IMGFMT_PCX, |
416d7b3ba3b2
Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents:
1341
diff
changeset
|
24 DM_IMGFMT_ILBM, |
416d7b3ba3b2
Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents:
1341
diff
changeset
|
25 DM_IMGFMT_RAW, |
416d7b3ba3b2
Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents:
1341
diff
changeset
|
26 DM_IMGFMT_ARAW, |
435 | 27 |
1543
416d7b3ba3b2
Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents:
1341
diff
changeset
|
28 DM_IMGFMT_LAST |
435 | 29 }; |
30 | |
31 | |
32 enum | |
33 { | |
34 DM_IFMT_PALETTE, | |
35 DM_IFMT_RGB, | |
36 DM_IFMT_RGBA, | |
37 }; | |
38 | |
39 | |
1544 | 40 // 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
|
41 enum |
e4bda4909d72
Make libgfx error mode a global variable, at least for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
971
diff
changeset
|
42 { |
1544 | 43 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
|
44 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
|
45 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
|
46 }; |
e4bda4909d72
Make libgfx error mode a global variable, at least for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
971
diff
changeset
|
47 |
e4bda4909d72
Make libgfx error mode a global variable, at least for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
971
diff
changeset
|
48 |
1544 | 49 // Probe scores |
50 enum | |
51 { | |
52 DM_PROBE_SCORE_FALSE = 0, | |
53 DM_PROBE_SCORE_MAYBE = 250, | |
54 DM_PROBE_SCORE_AVG = 500, | |
55 DM_PROBE_SCORE_GOOD = 750, | |
56 DM_PROBE_SCORE_MAX = 1000, | |
57 }; | |
58 | |
59 | |
1545
3b613fcbf3ff
Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents:
1544
diff
changeset
|
60 // 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
|
61 enum |
3b613fcbf3ff
Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents:
1544
diff
changeset
|
62 { |
3b613fcbf3ff
Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents:
1544
diff
changeset
|
63 DM_FMT_WR = 0x0001, |
3b613fcbf3ff
Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents:
1544
diff
changeset
|
64 DM_FMT_RD = 0x0002, |
3b613fcbf3ff
Improve how format read/write capabilities are marked and shown.
Matti Hamalainen <ccr@tnsp.org>
parents:
1544
diff
changeset
|
65 DM_FMT_RDWR = (DM_FMT_RD | DM_FMT_WR), |
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 |
1286 | 69 // Bitmapped image struct |
435 | 70 typedef struct |
71 { | |
1286 | 72 int format; // one of types specified by DM_IFMT_* |
73 int width, height; | |
74 int pitch; // bytes per scanline | |
75 int bpp; // bits per pixel | |
76 | |
77 int ncolors; // number of colors in palette, if any | |
78 int ctransp; // transparency color index | |
79 BOOL constpal; // is the palette a const? | |
80 DMColor *pal; // pointer to palette struct, NULL if no palette | |
81 | |
929
e1378398be0f
Add size field for allocated data size in DMImage.
Matti Hamalainen <ccr@tnsp.org>
parents:
902
diff
changeset
|
82 size_t size; |
435 | 83 Uint8 *data; |
84 } DMImage; | |
85 | |
86 | |
87 typedef struct | |
88 { | |
1288 | 89 int format; |
90 int scaleX, scaleY; | |
91 int nplanes, bpp; | |
1291 | 92 BOOL planar, paletted; |
1290
e7dc9bb9777e
Rename struct DMImageSpec to DMImageConvSpec.
Matti Hamalainen <ccr@tnsp.org>
parents:
1288
diff
changeset
|
93 } DMImageConvSpec; |
435 | 94 |
95 | |
96 typedef struct | |
97 { | |
98 char *fext; | |
99 char *desc; | |
100 int (*probe)(const Uint8 *buf, const size_t len); | |
101 int (*read)(const char *filename, DMImage **pimg); | |
102 int (*readFILE)(FILE *fp, DMImage **pimg); | |
1341 | 103 int (*write)(const char *filename, const DMImage *pimg, const DMImageConvSpec *spec); |
104 int (*writeFILE)(FILE *fp, const DMImage *pimg, const DMImageConvSpec *spec); | |
435 | 105 } DMImageFormat; |
106 | |
107 | |
1543
416d7b3ba3b2
Rename libgfx IMGFMT_* constants to DM_IMGFMT_*.
Matti Hamalainen <ccr@tnsp.org>
parents:
1341
diff
changeset
|
108 extern DMImageFormat dmImageFormatList[DM_IMGFMT_LAST]; |
1285
e4bda4909d72
Make libgfx error mode a global variable, at least for now.
Matti Hamalainen <ccr@tnsp.org>
parents:
971
diff
changeset
|
109 extern int dmGFXErrorMode; |
435 | 110 |
111 | |
1286 | 112 DMImage * dmImageAlloc(const int width, const int height, const int format, const int bpp); |
435 | 113 void dmImageFree(DMImage *img); |
1286 | 114 int dmImageGetBytesPerPixel(const int format); |
435 | 115 int dmImageProbeGeneric(const Uint8 *buf, const size_t len, DMImageFormat **fmt, int *index); |
116 | |
487
b89598501cec
Move dmCompareColor() to libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents:
462
diff
changeset
|
117 BOOL dmCompareColor(const DMColor *c1, const DMColor *c2, BOOL alpha); |
b89598501cec
Move dmCompareColor() to libgfx.
Matti Hamalainen <ccr@tnsp.org>
parents:
462
diff
changeset
|
118 |
435 | 119 |
1341 | 120 int dmWriteImageData(const DMImage *img, void *cbdata, int (*writeRowCB)(void *, const Uint8 *, const size_t), const DMImageConvSpec *spec); |
435 | 121 |
1341 | 122 int dmWriteIFFMasterRAWPalette(FILE *fp, const DMImage *img, int ncolors, const char *indent, const char *type); |
123 int dmWriteRAWImageFILE(FILE *fp, const DMImage *img, const DMImageConvSpec *spec); | |
124 int dmWriteRAWImage(const char *filename, const DMImage *img, const DMImageConvSpec *spec); | |
435 | 125 |
1341 | 126 int dmWritePPMImageFILE(FILE *fp, const DMImage *img, const DMImageConvSpec *spec); |
127 int dmWritePPMImage(const char *filename, const DMImage *img, const DMImageConvSpec *spec); | |
435 | 128 |
129 #ifdef DM_USE_LIBPNG | |
1341 | 130 int dmWritePNGImageFILE(FILE *fp, const DMImage *img, const DMImageConvSpec *spec); |
131 int dmWritePNGImage(const char *filename, const DMImage *img, const DMImageConvSpec *spec); | |
435 | 132 #endif |
133 | |
1341 | 134 int dmReadILBMImageFILE(FILE *fp, DMImage **pimg); |
135 int dmReadILBMImage(const char *filename, DMImage **pimg); | |
136 | |
137 int dmWritePCXImageFILE(FILE *fp, const DMImage *img, const DMImageConvSpec *spec); | |
138 int dmWritePCXImage(const char *filename, const DMImage *img, const DMImageConvSpec *spec); | |
435 | 139 int dmReadPCXImageFILE(FILE *fp, DMImage **pimg); |
140 int dmReadPCXImage(const char *filename, DMImage **pimg); | |
141 | |
142 | |
1309
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
143 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
|
144 { |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
145 void *handle; |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
146 |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
147 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
|
148 |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
149 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
|
150 } DMBitStreamContext; |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
151 |
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 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
|
154 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
|
155 BOOL dmPutBits(DMBitStreamContext *ctx, const int val, const int n); |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
156 int dmInitBitStreamFILE(DMBitStreamContext *ctx, FILE *fp); |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
157 |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
158 |
5ad7d780a09b
Move bitstream reading functions to libgfx, as they were only used there.
Matti Hamalainen <ccr@tnsp.org>
parents:
1307
diff
changeset
|
159 |
435 | 160 #ifdef __cplusplus |
161 } | |
162 #endif | |
163 | |
164 #endif // LIBMGFX_H |