diff options
| author | Kari Salminen | 2009-03-11 20:44:16 +0000 | 
|---|---|---|
| committer | Kari Salminen | 2009-03-11 20:44:16 +0000 | 
| commit | 4cbd3678f86956e0cc97e51c73bddfc0b5211cd0 (patch) | |
| tree | e9dc36e800f6943423b88a48ce50ab57e0414758 | |
| parent | 9e54b1c9634e2e1350957d5e641fe2ed7ab33fd2 (diff) | |
| download | scummvm-rg350-4cbd3678f86956e0cc97e51c73bddfc0b5211cd0.tar.gz scummvm-rg350-4cbd3678f86956e0cc97e51c73bddfc0b5211cd0.tar.bz2 scummvm-rg350-4cbd3678f86956e0cc97e51c73bddfc0b5211cd0.zip  | |
Add saving functions to Cine::Palette (Now one can output the palette in other formats too).
svn-id: r39336
| -rw-r--r-- | engines/cine/pal.cpp | 38 | ||||
| -rw-r--r-- | engines/cine/pal.h | 5 | 
2 files changed, 39 insertions, 4 deletions
diff --git a/engines/cine/pal.cpp b/engines/cine/pal.cpp index b2cb9b3451..72c04086da 100644 --- a/engines/cine/pal.cpp +++ b/engines/cine/pal.cpp @@ -29,6 +29,9 @@  namespace Cine { +static const Graphics::PixelFormat kLowPalFormat  = {2, 5, 5, 5, 8, 8, 4,  0, 0}; +static const Graphics::PixelFormat kHighPalFormat = {3, 0, 0, 0, 8, 0, 8, 16, 0}; +  Common::Array<PalEntry> palArray;  static byte paletteBuffer1[16];  static byte paletteBuffer2[16]; @@ -196,13 +199,11 @@ void Palette::saturatedAddColor(byte index, signed r, signed g, signed b) {  }  Palette &Palette::loadCineLowPal(const byte *colors, const uint numColors) { -	static const Graphics::PixelFormat format = {2, 5, 5, 5, 8, 8, 4, 0, 0}; -	return load(colors, format, numColors); +	return load(colors, kLowPalFormat, numColors);  }  Palette &Palette::loadCineHighPal(const byte *colors, const uint numColors) { -	static const Graphics::PixelFormat format = {3, 0, 0, 0, 8, 0, 8, 16, 0}; -	return load(colors, format, numColors); +	return load(colors, kHighPalFormat, numColors);  }  Palette &Palette::load(const byte *colors, const Graphics::PixelFormat format, const uint numColors) { @@ -232,4 +233,33 @@ Palette &Palette::load(const byte *colors, const Graphics::PixelFormat format, c  	return *this;  } +byte *Palette::save(byte *colors, const uint numBytes, const Graphics::PixelFormat format) const +{ +	assert(numBytes <= format.bytesPerPixel * colorCount()); // Make sure there's enough output space + +	// Clear the part of the output palette we're going to be writing to with all black +	memset(colors, 0, format.bytesPerPixel * colorCount()); + +	// Save the palette to the output in the specified format +	for (uint i = 0; i < colorCount(); i++) { +		// _rMax, _gMax, _bMax are also used as masks here +		colors[i * format.bytesPerPixel + (format.rShift / 8)] |= ((_colors[i].r & _rMax) << (format.rShift % 8)); +		colors[i * format.bytesPerPixel + (format.gShift / 8)] |= ((_colors[i].g & _gMax) << (format.gShift % 8)); +		colors[i * format.bytesPerPixel + (format.bShift / 8)] |= ((_colors[i].b & _bMax) << (format.bShift % 8)); +	} + +	// Return the pointer to the output palette +	return colors; +} + +byte *Palette::saveCineLowPal(byte *colors, const uint numBytes) const +{ +	return save(colors, numBytes, kLowPalFormat); +} + +byte *Palette::saveCineHighPal(byte *colors, const uint numBytes) const +{ +	return save(colors, numBytes, kHighPalFormat); +} +  } // End of namespace Cine diff --git a/engines/cine/pal.h b/engines/cine/pal.h index 3bebcaabba..5e6b3ea9a2 100644 --- a/engines/cine/pal.h +++ b/engines/cine/pal.h @@ -60,6 +60,11 @@ public:  	Palette &loadCineLowPal(const byte *colors, const uint numColors = 16);  	Palette &loadCineHighPal(const byte *colors, const uint numColors = 256);  	Palette &load(const byte *colors, const Graphics::PixelFormat format, const uint numColors); + +	byte *saveCineLowPal(byte *colors, const uint numBytes) const; +	byte *saveCineHighPal(byte *colors, const uint numBytes) const; +	byte *save(byte *colors, const uint numBytes, const Graphics::PixelFormat format) const; +  	Palette &rotateRight(byte firstIndex, byte lastIndex);  	Palette &saturatedAddColor(byte firstIndex, byte lastIndex, signed r, signed g, signed b);	  	uint colorCount() const;  | 
