diff options
author | peter1138 <peter1138@openttd.org> | 2006-06-13 17:13:46 +0000 |
---|---|---|
committer | peter1138 <peter1138@openttd.org> | 2006-06-13 17:13:46 +0000 |
commit | 642a3b4b22935dc9939456d6ddd4f47005a2cff7 (patch) | |
tree | 38c5f6a61b8aa174643c7743d815d4438dfd15e4 /screenshot.c | |
parent | 30c81ca9acf2b12d7cb1d3c738642e095b0a2406 (diff) | |
download | openttd-642a3b4b22935dc9939456d6ddd4f47005a2cff7.tar.xz |
(svn r5249) - Add code to copy the palette to a temporary byte aligned array when making a PCX screenshot, if the palette array is not byte aligned.
Diffstat (limited to 'screenshot.c')
-rw-r--r-- | screenshot.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/screenshot.c b/screenshot.c index b384a591e..34acd1e62 100644 --- a/screenshot.c +++ b/screenshot.c @@ -285,6 +285,7 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user uint maxlines; uint y; PcxHeader pcx; + bool success; if (pixelformat != 8 || w == 0) return false; @@ -388,14 +389,24 @@ static bool MakePCXImage(const char *name, ScreenshotCallback *callb, void *user return false; } - {assert_compile(sizeof(*palette) == 3);} - if (fwrite(palette, 256 * sizeof(*palette), 1, f) != 1) { - fclose(f); - return false; + if (sizeof(*palette) == 3) { + success = fwrite(palette, 256 * sizeof(*palette), 1, f) == 1; + } else { + /* If the palette is word-aligned, copy it to a temporary byte array */ + byte *tmp = malloc(256 * 3); + uint i; + for (i = 0; i < 256; i++) { + tmp[i * 3 + 0] = palette[i].r; + tmp[i * 3 + 1] = palette[i].g; + tmp[i * 3 + 2] = palette[i].b; + } + success = fwrite(tmp, 256 * 3, 1, f) == 1; + free(tmp); } + fclose(f); - return true; + return success; } //************************************************ |