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:
parent
8403d177aa
commit
c8f837b51b
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user