Python3 Pillow2.3.0 неправильно декодирует некоторые файлы pcx
Привет всем, мне нужна помощь с подушкой питона. В настоящее время я использую v2.3.0 и python 3.3.
Я пытаюсь использовать изображения pcx, извлеченные из старой игры (Might and Magic VI), в качестве текстур. (Игра имеет 2D-интерфейс поверх 3D-среды. Этот 2D-интерфейс состоит из различных внутренних форматов и файлов pcx.)
Проблема в том, что один из этих pcx неправильно отображается на подушке. при правильном отображении средством просмотра изображений EyeOfGnome. (gdk-pixbuf) Еще один pcx отображается правильно под подушкой!
Что я имею в виду под неправильно? Плохое изображение имеет своего рода "красное смещение" цветов пикселей. левая граница немного красная. Это похоже на "3D-изображение", оно немного размыто и в целом немного темнее.
Я хотел бы, чтобы он был составлен с другими частями игрового интерфейса, я не могу так его использовать.
Я открыл файлы pcx с помощью шестнадцатеричного редактора, и основное отличие, которое я заметил в заголовке pcx, заключается в том, что неправильный файл имеет палитру BYTE [48]; поле полностью пустое. в то время как у другого есть некоторые данные в этом. Но это не должно быть проблемой, потому что другие зрители отображают это правильно.
struct PcxHeader
{
BYTE Identifier; // PCX Id Number (Always 0x0A) // 10
BYTE Version; // Version Number // 5
BYTE Encoding; // Encoding Format // 1
BYTE BitsPerPixel; // Bits per Pixel // 8
WORD XStart; // Left of image // 0
WORD YStart; // Top of Image // 0
WORD XEnd; // Right of Image // 319
WORD YEnd; // Bottom of image // 199
WORD HorzRes; // Horizontal Resolution // 320
WORD VertRes; // Vertical Resolution // 200
BYTE Palette[48]; // 16-Color EGA Palette
BYTE Reserved1; // Reserved (Always 0)
BYTE NumBitPlanes; // Number of Bit Planes // 1
WORD BytesPerLine; // Bytes per Scan-line // 320
WORD PaletteType; // Palette Type // 0
WORD HorzScreenSize; // Horizontal Screen Size // 0
WORD VertScreenSize; // Vertical Screen Size // 0
BYTE Reserved2[54]; // Reserved (Always 0)
};
Это часть тестового кода.
def showpcx(fname):
img = Image.open(fname)
img.show()
showpcx("border1.pcx")
showpcx("border2.pcx")
этот архив содержит файлы https://db.tt/td291VTh