IMAGE: Fix taking screenshots on big endian systems
This commit is contained in:
parent
8ae17b481a
commit
205df5dbdf
4 changed files with 18 additions and 1 deletions
|
@ -1214,7 +1214,11 @@ bool OpenGLGraphicsManager::saveScreenshot(const Common::String &filename) const
|
|||
pixels.resize(lineSize * height);
|
||||
GL_CALL(glReadPixels(0, 0, width, height, GL_RGB, GL_UNSIGNED_BYTE, &pixels.front()));
|
||||
|
||||
#ifdef SCUMM_LITTLE_ENDIAN
|
||||
const Graphics::PixelFormat format(3, 8, 8, 8, 0, 0, 8, 16, 0);
|
||||
#else
|
||||
const Graphics::PixelFormat format(3, 8, 8, 8, 0, 16, 8, 0, 0);
|
||||
#endif
|
||||
Graphics::Surface data;
|
||||
data.init(width, height, lineSize, &pixels.front(), format);
|
||||
#ifdef USE_PNG
|
||||
|
|
|
@ -1476,7 +1476,11 @@ bool SurfaceSdlGraphicsManager::saveScreenshot(const char *filename) {
|
|||
return false;
|
||||
}
|
||||
|
||||
#ifdef SCUMM_LITTLE_ENDIAN
|
||||
const Graphics::PixelFormat format(3, 8, 8, 8, 0, 0, 8, 16, 0);
|
||||
#else
|
||||
const Graphics::PixelFormat format(3, 8, 8, 8, 0, 16, 8, 0, 0);
|
||||
#endif
|
||||
Graphics::Surface data;
|
||||
data.init(rgbScreen->w, rgbScreen->h, rgbScreen->pitch, rgbScreen->pixels, format);
|
||||
const bool success = Image::writePNG(out, data);
|
||||
|
|
|
@ -133,7 +133,11 @@ bool BitmapDecoder::loadStream(Common::SeekableReadStream &stream) {
|
|||
}
|
||||
|
||||
bool writeBMP(Common::WriteStream &out, const Graphics::Surface &input, const bool bottomUp) {
|
||||
#ifdef SCUMM_LITTLE_ENDIAN
|
||||
const Graphics::PixelFormat requiredFormat_3byte(3, 8, 8, 8, 0, 16, 8, 0, 0);
|
||||
#else
|
||||
const Graphics::PixelFormat requiredFormat_3byte(3, 8, 8, 8, 0, 0, 8, 16, 0);
|
||||
#endif
|
||||
|
||||
Graphics::Surface *tmp = NULL;
|
||||
const Graphics::Surface *surface;
|
||||
|
|
|
@ -244,8 +244,13 @@ bool PNGDecoder::loadStream(Common::SeekableReadStream &stream) {
|
|||
|
||||
bool writePNG(Common::WriteStream &out, const Graphics::Surface &input, const bool bottomUp) {
|
||||
#ifdef USE_PNG
|
||||
const Graphics::PixelFormat requiredFormat_3byte(3, 8, 8, 8, 0, 16, 8, 0, 0);
|
||||
#ifdef SCUMM_LITTLE_ENDIAN
|
||||
const Graphics::PixelFormat requiredFormat_3byte(3, 8, 8, 8, 0, 0, 8, 16, 0);
|
||||
const Graphics::PixelFormat requiredFormat_4byte(4, 8, 8, 8, 8, 0, 8, 16, 24);
|
||||
#else
|
||||
const Graphics::PixelFormat requiredFormat_3byte(3, 8, 8, 8, 0, 16, 8, 0, 0);
|
||||
const Graphics::PixelFormat requiredFormat_4byte(4, 8, 8, 8, 8, 24, 16, 8, 0);
|
||||
#endif
|
||||
|
||||
if (input.format.bytesPerPixel == 3) {
|
||||
if (input.format != requiredFormat_3byte) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue