diff options
author | Eugene Sandulenko | 2016-05-18 02:23:11 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2016-05-18 02:23:11 +0200 |
commit | c18945e9918d10a8a9a6f403a64f9fdad2d5cc4a (patch) | |
tree | 0032b02a0fa92ede5fcb39c48c106cd725e57ba7 /image | |
parent | b9158fcf50d9047233823c8290ff999f0a248cfd (diff) | |
download | scummvm-rg350-c18945e9918d10a8a9a6f403a64f9fdad2d5cc4a.tar.gz scummvm-rg350-c18945e9918d10a8a9a6f403a64f9fdad2d5cc4a.tar.bz2 scummvm-rg350-c18945e9918d10a8a9a6f403a64f9fdad2d5cc4a.zip |
GRAPHICS: Add support for 4bpp BMPs
Diffstat (limited to 'image')
-rw-r--r-- | image/codecs/bmp_raw.cpp | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/image/codecs/bmp_raw.cpp b/image/codecs/bmp_raw.cpp index 83aedc84e6..b47d5a178d 100644 --- a/image/codecs/bmp_raw.cpp +++ b/image/codecs/bmp_raw.cpp @@ -48,7 +48,24 @@ const Graphics::Surface *BitmapRawDecoder::decodeFrame(Common::SeekableReadStrea int srcPitch = _width * (_bitsPerPixel >> 3); const int extraDataLength = (srcPitch % 4) ? 4 - (srcPitch % 4) : 0; - if (_bitsPerPixel == 8) { + if (_bitsPerPixel == 4) { + for (int i = 0; i < _height; i++) { + byte *dst = (byte *)_surface->getBasePtr(0, _height - i - 1); + for (int j = 0; j < _width; j++) { + byte color = stream.readByte(); + + *dst++ = (color & 0xf0) >> 4; + j++; + + if (j ==_width) + break; + + *dst++ = color & 0x0f; + } + + stream.skip(extraDataLength); + } + } else if (_bitsPerPixel == 8) { byte *dst = (byte *)_surface->getPixels(); for (int i = 0; i < _height; i++) { @@ -100,6 +117,7 @@ const Graphics::Surface *BitmapRawDecoder::decodeFrame(Common::SeekableReadStrea Graphics::PixelFormat BitmapRawDecoder::getPixelFormat() const { switch (_bitsPerPixel) { + case 4: case 8: return Graphics::PixelFormat::createFormatCLUT8(); case 24: |