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; int width = -1, height = -1;
Epcxformat format; Epcxformat format;
int fSize,y; int fSize,y;
bool check1, check2;
unsigned char add; unsigned char add;
int it=0; int it=0;
fSize = read_le_u32(pcx + it); it+=4; fSize = read_le_u32(pcx + it); it+=4;
width = read_le_u32(pcx + it); it+=4; width = read_le_u32(pcx + it); it+=4;
height = read_le_u32(pcx + it); it+=4; height = read_le_u32(pcx + it); it+=4;
if (fSize==width*height*3) if (fSize==width*height*3)
check1=true;
else
check1=false;
if (fSize==width*height)
check2=true;
else
check2=false;
if (check1)
format=PCX24B; format=PCX24B;
else if (check2) else if (fSize==width*height)
format=PCX8B; format=PCX8B;
else else
return NULL; return NULL;
add = 4 - width%4; add = 4 - width%4;
if (add==4) if (add==4)
add=0; add=0;
if (format==PCX8B) if (format==PCX8B)
{ {
ret = SDL_CreateRGBSurface(SDL_SWSURFACE, width+add, height, 8, 0, 0, 0, 0); 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; it = pcxs-256*3;
for (int i=0;i<256;i++) for (int i=0;i<256;i++)
{ {
@ -126,6 +105,17 @@ SDL_Surface * CPCXConv::getSurface() const
} }
else 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--) for (y=height; y>0; y--)
{ {
it = 0xC + (y-1)*width*3; it = 0xC + (y-1)*width*3;