diff options
author | June McEnroe <june@causal.agency> | 2018-02-14 17:03:27 -0500 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2018-02-14 17:03:27 -0500 |
commit | 442d034243dc1a8579f163de0e9823af4f7f5fc3 (patch) | |
tree | b43482543e89c3f5f2d6a9f53ed3f4f117af07fe | |
parent | Write newlines between watch iterations (diff) | |
download | src-442d034243dc1a8579f163de0e9823af4f7f5fc3.tar.gz src-442d034243dc1a8579f163de0e9823af4f7f5fc3.zip |
Write at least 1 for each component of sBIT in gfxx
PNG requires each to be 0 < x <= depth. ImageMagick actually checks.
-rw-r--r-- | bin/gfxx.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/bin/gfxx.c b/bin/gfxx.c index 6ccb17cb..5f05650c 100644 --- a/bin/gfxx.c +++ b/bin/gfxx.c @@ -28,9 +28,11 @@ #include <unistd.h> #include <zlib.h> +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#define MASK(b) ((1 << (b)) - 1) + #define RGB(r, g, b) ((uint32_t)(r) << 16 | (uint32_t)(g) << 8 | (uint32_t)(b)) #define GRAY(n) RGB(n, n, n) -#define MASK(b) ((1 << (b)) - 1) static enum { COLOR_INDEXED, @@ -351,7 +353,8 @@ static void pngDump(uint32_t *src, size_t srcWidth, size_t srcHeight) { pngWrite(options, strlen(options)); } PNG_CHUNK("sBIT", 3) { - pngWrite(&bits[R], 3); + uint8_t sbit[3] = { MAX(bits[R], 1), MAX(bits[G], 1), MAX(bits[B], 1) }; + pngWrite(sbit, sizeof(sbit)); } PNG_CHUNK("IDAT", dataSize) { pngWrite(data, dataSize); |