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

0 ответов

Другие вопросы по тегам