(svn r17909) -Fix: 32bpp BMP screenshots were in wrong colours on big endian machines

This commit is contained in:
smatz 2009-10-30 23:43:44 +00:00
parent ee2d790b34
commit 86c40a17a9

View File

@ -143,6 +143,15 @@ static bool MakeBmpImage(char *name, ScreenshotCallback *callb, void *userdata,
/* render the pixels */ /* render the pixels */
callb(userdata, buff, h, padw, n); 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 */ /* write each line */
while (n) while (n)
if (fwrite(buff + (--n) * padw * bpp, padw * bpp, 1, f) != 1) { if (fwrite(buff + (--n) * padw * bpp, padw * bpp, 1, f) != 1) {