mirror of
https://github.com/cc65/cc65.git
synced 2024-12-25 17:29:50 +00:00
Use only as many palette entries as there are colors in the image.
git-svn-id: svn://svn.cc65.org/cc65/trunk@5556 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
parent
fa052219e3
commit
4abdecc728
@ -242,6 +242,7 @@ Bitmap* ReadPCXFile (const char* Name)
|
|||||||
Bitmap* B;
|
Bitmap* B;
|
||||||
unsigned char* L;
|
unsigned char* L;
|
||||||
Pixel* Px;
|
Pixel* Px;
|
||||||
|
unsigned MaxIdx = 0;
|
||||||
unsigned X, Y;
|
unsigned X, Y;
|
||||||
|
|
||||||
|
|
||||||
@ -313,6 +314,9 @@ Bitmap* ReadPCXFile (const char* Name)
|
|||||||
|
|
||||||
/* Create pixels */
|
/* Create pixels */
|
||||||
for (X = 0; X < P->Width; ++X, ++Px) {
|
for (X = 0; X < P->Width; ++X, ++Px) {
|
||||||
|
if (L[X] > MaxIdx) {
|
||||||
|
MaxIdx = L[X];
|
||||||
|
}
|
||||||
Px->Index = L[X];
|
Px->Index = L[X];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -388,22 +392,26 @@ Bitmap* ReadPCXFile (const char* Name)
|
|||||||
Error ("Invalid palette marker in PCX file `%s'", Name);
|
Error ("Invalid palette marker in PCX file `%s'", Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Read the palette */
|
|
||||||
ReadData (F, Palette, sizeof (Palette));
|
|
||||||
Count = 256;
|
|
||||||
|
|
||||||
} else if (EndPos == CurPos) {
|
} else if (EndPos == CurPos) {
|
||||||
|
|
||||||
/* The palette is in the header */
|
/* The palette is in the header */
|
||||||
FileSetPos (F, 16);
|
FileSetPos (F, 16);
|
||||||
ReadData (F, Palette, 48);
|
|
||||||
Count = 16;
|
/* Check the maximum index for safety */
|
||||||
|
if (MaxIdx > 15) {
|
||||||
|
Error ("PCX file `%s' contains more than 16 indexed colors "
|
||||||
|
"but no extra palette", Name);
|
||||||
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Error ("Error in PCX file `%s': %lu bytes at end of pixel data",
|
Error ("Error in PCX file `%s': %lu bytes at end of pixel data",
|
||||||
Name, EndPos - CurPos);
|
Name, EndPos - CurPos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Read the palette. We will just read what we need. */
|
||||||
|
Count = MaxIdx + 1;
|
||||||
|
ReadData (F, Palette, Count * sizeof (Palette[0]));
|
||||||
|
|
||||||
/* Create the palette from the data */
|
/* Create the palette from the data */
|
||||||
B->Pal = NewPalette (Count);
|
B->Pal = NewPalette (Count);
|
||||||
for (I = 0; I < Count; ++I) {
|
for (I = 0; I < Count; ++I) {
|
||||||
@ -412,6 +420,7 @@ Bitmap* ReadPCXFile (const char* Name)
|
|||||||
B->Pal->Entries[I].B = Palette[I][2];
|
B->Pal->Entries[I].B = Palette[I][2];
|
||||||
B->Pal->Entries[I].A = 0;
|
B->Pal->Entries[I].A = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Close the file */
|
/* Close the file */
|
||||||
|
Loading…
Reference in New Issue
Block a user