diff options
Diffstat (limited to 'engines')
-rw-r--r-- | engines/mohawk/graphics.cpp | 17 | ||||
-rw-r--r-- | engines/mohawk/myst_graphics.cpp | 24 | ||||
-rw-r--r-- | engines/mohawk/myst_graphics.h | 2 | ||||
-rw-r--r-- | engines/sci/graphics/maciconbar.cpp | 18 | ||||
-rw-r--r-- | engines/sci/graphics/maciconbar.h | 2 |
5 files changed, 28 insertions, 35 deletions
diff --git a/engines/mohawk/graphics.cpp b/engines/mohawk/graphics.cpp index a08d034ef7..0f9a62c891 100644 --- a/engines/mohawk/graphics.cpp +++ b/engines/mohawk/graphics.cpp @@ -58,22 +58,7 @@ void MohawkSurface::convertToTrueColor() { assert(_palette); - Graphics::PixelFormat pixelFormat = g_system->getScreenFormat(); - Graphics::Surface *surface = new Graphics::Surface(); - surface->create(_surface->w, _surface->h, pixelFormat); - - for (uint16 i = 0; i < _surface->h; i++) { - for (uint16 j = 0; j < _surface->w; j++) { - byte palIndex = *((byte *)_surface->pixels + i * _surface->pitch + j); - byte r = _palette[palIndex * 3 + 0]; - byte g = _palette[palIndex * 3 + 1]; - byte b = _palette[palIndex * 3 + 2]; - if (pixelFormat.bytesPerPixel == 2) - *((uint16 *)surface->getBasePtr(j, i)) = pixelFormat.RGBToColor(r, g, b); - else - *((uint32 *)surface->getBasePtr(j, i)) = pixelFormat.RGBToColor(r, g, b); - } - } + Graphics::Surface *surface = _surface->convertTo(g_system->getScreenFormat(), _palette); // Free everything and set the new surface as the converted surface _surface->free(); diff --git a/engines/mohawk/myst_graphics.cpp b/engines/mohawk/myst_graphics.cpp index 151390580f..86eb4f2b1b 100644 --- a/engines/mohawk/myst_graphics.cpp +++ b/engines/mohawk/myst_graphics.cpp @@ -29,7 +29,7 @@ #include "common/textconsole.h" #include "engines/util.h" #include "graphics/jpeg.h" -#include "graphics/pict.h" +#include "graphics/decoders/pict.h" namespace Mohawk { @@ -51,10 +51,8 @@ MystGraphics::MystGraphics(MohawkEngine_Myst* vm) : GraphicsManager(), _vm(vm) { if (_vm->getFeatures() & GF_ME) { _jpegDecoder = new Graphics::JPEG(); - _pictDecoder = new Graphics::PictDecoder(_pixelFormat); } else { _jpegDecoder = NULL; - _pictDecoder = NULL; } _pictureFile.entries = NULL; @@ -70,7 +68,6 @@ MystGraphics::MystGraphics(MohawkEngine_Myst* vm) : GraphicsManager(), _vm(vm) { MystGraphics::~MystGraphics() { delete _bmpDecoder; delete _jpegDecoder; - delete _pictDecoder; delete[] _pictureFile.entries; _backBuffer->free(); @@ -138,7 +135,13 @@ MohawkSurface *MystGraphics::decodeImage(uint16 id) { mhkSurface = new MohawkSurface(_jpegDecoder->getSurface(_pixelFormat)); delete stream; } else if (_pictureFile.entries[i].type == 1) { - mhkSurface = new MohawkSurface(_pictDecoder->decodeImage(new Common::SeekableSubReadStream(&_pictureFile.picFile, _pictureFile.entries[i].offset, _pictureFile.entries[i].offset + _pictureFile.entries[i].size))); + Graphics::PICTDecoder pict; + Common::SeekableSubReadStream subStream(&_pictureFile.picFile, _pictureFile.entries[i].offset, _pictureFile.entries[i].offset + _pictureFile.entries[i].size); + + if (!pict.loadStream(subStream)) + error("Could not decode Myst ME Mac PICT"); + + mhkSurface = new MohawkSurface(pict.getSurface()->convertTo(_pixelFormat)); } else error ("Unknown Picture File type %d", _pictureFile.entries[i].type); break; @@ -170,9 +173,14 @@ MohawkSurface *MystGraphics::decodeImage(uint16 id) { dataStream->seek(0); } - if (isPict) - mhkSurface = new MohawkSurface(_pictDecoder->decodeImage(dataStream)); - else { + if (isPict) { + Graphics::PICTDecoder pict; + + if (!pict.loadStream(*dataStream)) + error("Could not decode Myst ME PICT"); + + mhkSurface = new MohawkSurface(pict.getSurface()->convertTo(_pixelFormat)); + } else { mhkSurface = _bmpDecoder->decodeImage(dataStream); mhkSurface->convertToTrueColor(); } diff --git a/engines/mohawk/myst_graphics.h b/engines/mohawk/myst_graphics.h index e2b02db5fc..8074c9828b 100644 --- a/engines/mohawk/myst_graphics.h +++ b/engines/mohawk/myst_graphics.h @@ -29,7 +29,6 @@ namespace Graphics { class JPEG; -class PictDecoder; } namespace Mohawk { @@ -70,7 +69,6 @@ protected: private: MohawkEngine_Myst *_vm; MystBitmap *_bmpDecoder; - Graphics::PictDecoder *_pictDecoder; Graphics::JPEG *_jpegDecoder; struct PictureFile { diff --git a/engines/sci/graphics/maciconbar.cpp b/engines/sci/graphics/maciconbar.cpp index bff145ad53..7ecba5a24d 100644 --- a/engines/sci/graphics/maciconbar.cpp +++ b/engines/sci/graphics/maciconbar.cpp @@ -31,8 +31,8 @@ #include "common/memstream.h" #include "common/system.h" -#include "graphics/pict.h" #include "graphics/surface.h" +#include "graphics/decoders/pict.h" namespace Sci { @@ -201,18 +201,20 @@ void GfxMacIconBar::setInventoryIcon(int16 icon) { } Graphics::Surface *GfxMacIconBar::loadPict(ResourceId id) { - Graphics::PictDecoder pictDecoder(Graphics::PixelFormat::createFormatCLUT8()); + Graphics::PICTDecoder pictDecoder; Resource *res = g_sci->getResMan()->findResource(id, false); if (!res || res->size == 0) return 0; - byte palette[256 * 3]; - Common::SeekableReadStream *stream = new Common::MemoryReadStream(res->data, res->size); - Graphics::Surface *surface = pictDecoder.decodeImage(stream, palette); - remapColors(surface, palette); + Common::MemoryReadStream stream(res->data, res->size); + if (!pictDecoder.loadStream(stream)) + return 0; + + Graphics::Surface *surface = new Graphics::Surface(); + surface->copyFrom(*pictDecoder.getSurface()); + remapColors(surface, pictDecoder.getPalette()); - delete stream; return surface; } @@ -221,7 +223,7 @@ Graphics::Surface *GfxMacIconBar::createImage(uint32 iconIndex, bool isSelected) return loadPict(ResourceId(type, iconIndex + 1)); } -void GfxMacIconBar::remapColors(Graphics::Surface *surf, byte *palette) { +void GfxMacIconBar::remapColors(Graphics::Surface *surf, const byte *palette) { byte *pixels = (byte *)surf->pixels; // Remap to the screen palette diff --git a/engines/sci/graphics/maciconbar.h b/engines/sci/graphics/maciconbar.h index 43de37a904..eca10b804c 100644 --- a/engines/sci/graphics/maciconbar.h +++ b/engines/sci/graphics/maciconbar.h @@ -61,7 +61,7 @@ private: Graphics::Surface *loadPict(ResourceId id); Graphics::Surface *createImage(uint32 iconIndex, bool isSelected); - void remapColors(Graphics::Surface *surf, byte *palette); + void remapColors(Graphics::Surface *surf, const byte *palette); void drawIcon(uint16 index, bool selected); void drawSelectedImage(uint16 index); |