aboutsummaryrefslogtreecommitdiff
path: root/image
diff options
context:
space:
mode:
authorEugene Sandulenko2016-06-04 00:16:35 +0200
committerEugene Sandulenko2016-06-04 00:16:35 +0200
commitc76dfb031e31ef68d59aa1a9c2cf418151a009eb (patch)
treef44807105b00a83eaf511482b75b95e43a4c03f7 /image
parent60297cb9fa51dcc2c145fa9aeb86a924c59c8b76 (diff)
downloadscummvm-rg350-c76dfb031e31ef68d59aa1a9c2cf418151a009eb.tar.gz
scummvm-rg350-c76dfb031e31ef68d59aa1a9c2cf418151a009eb.tar.bz2
scummvm-rg350-c76dfb031e31ef68d59aa1a9c2cf418151a009eb.zip
IMAGE: Added support for 1bpp BMPs
Diffstat (limited to 'image')
-rw-r--r--image/codecs/bmp_raw.cpp26
1 files changed, 24 insertions, 2 deletions
diff --git a/image/codecs/bmp_raw.cpp b/image/codecs/bmp_raw.cpp
index b47d5a178d..f810678fc2 100644
--- a/image/codecs/bmp_raw.cpp
+++ b/image/codecs/bmp_raw.cpp
@@ -46,9 +46,30 @@ const Graphics::Surface *BitmapRawDecoder::decodeFrame(Common::SeekableReadStrea
_surface->create(_width, _height, format);
int srcPitch = _width * (_bitsPerPixel >> 3);
- const int extraDataLength = (srcPitch % 4) ? 4 - (srcPitch % 4) : 0;
+ int extraDataLength = (srcPitch % 4) ? 4 - (srcPitch % 4) : 0;
- if (_bitsPerPixel == 4) {
+ if (_bitsPerPixel == 1) {
+ srcPitch = (_width + 7) / 8;
+ extraDataLength = (srcPitch % 2) ? 2 - (srcPitch % 4) : 0;
+ }
+
+ if (_bitsPerPixel == 1) {
+ for (int i = _height - 1; i >= 0; i--) {
+ byte *dst = (byte *)_surface->getBasePtr(0, i);
+ for (int j = 0; j != _width;) {
+ byte color = stream.readByte();
+ for (int k = 0; k < 8; k++) {
+ *dst++ = (color & 0x80) ? 0x01 : 0x00;
+ color <<= 1;
+ j++;
+ if (j == _width) {
+ break;
+ }
+ }
+ }
+ stream.skip(extraDataLength);
+ }
+ } else 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++) {
@@ -117,6 +138,7 @@ const Graphics::Surface *BitmapRawDecoder::decodeFrame(Common::SeekableReadStrea
Graphics::PixelFormat BitmapRawDecoder::getPixelFormat() const {
switch (_bitsPerPixel) {
+ case 1:
case 4:
case 8:
return Graphics::PixelFormat::createFormatCLUT8();