aboutsummaryrefslogtreecommitdiff
path: root/image/codecs/bmp_raw.cpp
diff options
context:
space:
mode:
authorEugene Sandulenko2016-05-18 02:23:11 +0200
committerEugene Sandulenko2016-05-18 02:23:11 +0200
commitc18945e9918d10a8a9a6f403a64f9fdad2d5cc4a (patch)
tree0032b02a0fa92ede5fcb39c48c106cd725e57ba7 /image/codecs/bmp_raw.cpp
parentb9158fcf50d9047233823c8290ff999f0a248cfd (diff)
downloadscummvm-rg350-c18945e9918d10a8a9a6f403a64f9fdad2d5cc4a.tar.gz
scummvm-rg350-c18945e9918d10a8a9a6f403a64f9fdad2d5cc4a.tar.bz2
scummvm-rg350-c18945e9918d10a8a9a6f403a64f9fdad2d5cc4a.zip
GRAPHICS: Add support for 4bpp BMPs
Diffstat (limited to 'image/codecs/bmp_raw.cpp')
-rw-r--r--image/codecs/bmp_raw.cpp20
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: