1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-03-19 21:10:12 +02:00

Cleaned-up pcx loader.

This commit is contained in:
Frank Zago 2011-10-08 05:44:37 +00:00
parent 8403d177aa
commit c8f837b51b

View File

@ -54,49 +54,28 @@ SDL_Surface * CPCXConv::getSurface() const
int width = -1, height = -1;
Epcxformat format;
int fSize,y;
bool check1, check2;
unsigned char add;
int it=0;
fSize = read_le_u32(pcx + it); it+=4;
width = read_le_u32(pcx + it); it+=4;
height = read_le_u32(pcx + it); it+=4;
if (fSize==width*height*3)
check1=true;
else
check1=false;
if (fSize==width*height)
check2=true;
else
check2=false;
if (check1)
format=PCX24B;
else if (check2)
else if (fSize==width*height)
format=PCX8B;
else
return NULL;
add = 4 - width%4;
if (add==4)
add=0;
if (format==PCX8B)
{
ret = SDL_CreateRGBSurface(SDL_SWSURFACE, width+add, height, 8, 0, 0, 0, 0);
}
else
{
#if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
int bmask = 0xff0000;
int gmask = 0x00ff00;
int rmask = 0x0000ff;
#else
int bmask = 0x0000ff;
int gmask = 0x00ff00;
int rmask = 0xff0000;
#endif
ret = SDL_CreateRGBSurface(SDL_SWSURFACE, width+add, height, 24, rmask, gmask, bmask, 0);
}
if (format==PCX8B)
{
it = pcxs-256*3;
for (int i=0;i<256;i++)
{
@ -126,6 +105,17 @@ SDL_Surface * CPCXConv::getSurface() const
}
else
{
#if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
int bmask = 0xff0000;
int gmask = 0x00ff00;
int rmask = 0x0000ff;
#else
int bmask = 0x0000ff;
int gmask = 0x00ff00;
int rmask = 0xff0000;
#endif
ret = SDL_CreateRGBSurface(SDL_SWSURFACE, width+add, height, 24, rmask, gmask, bmask, 0);
for (y=height; y>0; y--)
{
it = 0xC + (y-1)*width*3;