From 86c40a17a95610fda7631bc203ee54c3f3ab8b93 Mon Sep 17 00:00:00 2001 From: smatz Date: Fri, 30 Oct 2009 23:43:44 +0000 Subject: [PATCH] (svn r17909) -Fix: 32bpp BMP screenshots were in wrong colours on big endian machines --- src/screenshot.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/screenshot.cpp b/src/screenshot.cpp index ea73c1f58b..0fa309d115 100644 --- a/src/screenshot.cpp +++ b/src/screenshot.cpp @@ -143,6 +143,15 @@ static bool MakeBmpImage(char *name, ScreenshotCallback *callb, void *userdata, /* render the pixels */ callb(userdata, buff, h, padw, n); +#if TTD_ENDIAN == TTD_BIG_ENDIAN + if (pixelformat == 32) { + /* Data stored in BMP are always little endian, + * but we have big endian data in buffer */ + uint32 *buff32 = (uint32 *)buff; + for (i = 0; i < padw * n; i++) buff32[i] = BSWAP32(buff32[i]); + } +#endif + /* write each line */ while (n) if (fwrite(buff + (--n) * padw * bpp, padw * bpp, 1, f) != 1) {