|
From: <dv...@us...> - 2008-05-04 03:16:11
|
Revision: 262
http://dunelegacy.svn.sourceforge.net/dunelegacy/?rev=262&view=rev
Author: dvalin
Date: 2008-05-03 20:16:07 -0700 (Sat, 03 May 2008)
Log Message:
-----------
fix handling of pictures with embedded palette (ie. VIRGIN.CPS)
Modified Paths:
--------------
branches/dunks/src/pakfile/Cpsfile.cpp
Modified: branches/dunks/src/pakfile/Cpsfile.cpp
===================================================================
--- branches/dunks/src/pakfile/Cpsfile.cpp 2008-05-03 23:28:32 UTC (rev 261)
+++ branches/dunks/src/pakfile/Cpsfile.cpp 2008-05-04 03:16:07 UTC (rev 262)
@@ -1,8 +1,8 @@
#include "pakfile/Cpsfile.h"
#include <SDL_endian.h>
#include "DataCache.h"
-#include <stdlib.h>
-#include <string.h>
+#include <iostream>
+#include <string>
#define SIZE_X 320
#define SIZE_Y 240
@@ -11,10 +11,25 @@
{
Filedata = bufFiledata;
CpsFilesize = bufsize;
- if (palette == NULL)
- m_palette = DataCache::Instance()->getPalette(IBM_PAL);
- else
- m_palette = palette;
+ if(*(unsigned char *)(bufFiledata + 10 + 9) != 3){
+ std::cout << "CPS has embedded palette, loading..." << std::endl;
+ m_palette = new SDL_Palette;
+ m_palette->ncolors = bufsize / 3;
+ m_palette->colors = new SDL_Color[m_palette->ncolors];
+
+ bufFiledata += 10;
+ for (int i = 0; i < m_palette->ncolors; i++){
+ m_palette->colors[i].r = *bufFiledata++ <<2;
+ m_palette->colors[i].g = *bufFiledata++ <<2;
+ m_palette->colors[i].b = *bufFiledata++ <<2;
+ m_palette->colors[i].unused = 0;
+ }
+ }else{
+ if (palette == NULL)
+ m_palette = DataCache::Instance()->getPalette(IBM_PAL);
+ else
+ m_palette = palette;
+ }
}
Cpsfile::~Cpsfile()
@@ -43,15 +58,21 @@
}
if(decode80(Filedata + 10 + PaletteSize,ImageOut,0) == -2) {
- fprintf(stderr,"Error: Cannot decode Cps-File\n");
+ std::cerr << "Error: Cannot decode Cps-File" << std::endl;
}
// create new picture surface
if((pic = SDL_CreateRGBSurface(SDL_SWSURFACE,SIZE_X,SIZE_Y,8,0,0,0,0))== NULL) {
return NULL;
}
-
-
+
+/* for (int i = 0; i < 256; i++){
+ m_palette->colors[i].r = *Filedata++ << 2;
+ m_palette->colors[i].g = *Filedata++ << 2;
+ m_palette->colors[i].b = *Filedata++ << 2;
+ m_palette->colors[i].reserved = 0;
+ }
+*/
SDL_SetColors(pic, m_palette->colors, 0, m_palette->ncolors);
SDL_LockSurface(pic);
@@ -85,7 +106,7 @@
// create new picture surface
if((returnPic = SDL_CreateRGBSurface(SDL_HWSURFACE,width,height,8,0,0,0,0))== NULL) {
- fprintf(stderr,"GetSubPicture: Cannot create new Picture!\n");
+ std::cerr << "GetSubPicture: Cannot create new Picture!" << std::endl;
exit(EXIT_FAILURE);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|