Вот уже что-то)
Код:
QPixmap Texture::getImage()
{
QDataStream stream(m_buffer);
stream.setByteOrder(QDataStream::LittleEndian);
QVector<quint8> data;
quint8 d = 0;
stream.skipRawData(m_header.offsets[0]);
for (quint32 j = 0; j < m_header.lengths[0]; j++)
{
stream >> d;
data << d;
}
squish::u8* uncompressed;
if (m_header.encoding == 2)
{
int dxtver;
switch (m_header.alphaEncoding)
{
case 0: dxtver = squish::kDxt1; break;
case 1: dxtver = squish::kDxt3; break;
case 7: dxtver = squish::kDxt5; break;
//default: std::cout << "DXT version not recognized.\n"; return false; break;
}
uncompressed = new squish::u8[m_header.width * m_header.height * 4];
squish::DecompressImage(uncompressed, m_header.width, m_header.height, data.data(), dxtver);
}
else
uncompressed = data.data();
QVector<QRgb> colors;
for (quint32 i = 0; i < 256; i++)
{
colors.append(qRgba(m_header.colors[i].r,
m_header.colors[i].g,
m_header.colors[i].b,
m_header.colors[i].a));
}
QImage img(uncompressed, m_header.width, m_header.height, QImage::Format::Format_Indexed8);
return QPixmap::fromImage(img);
}
Правда цветовая палитра не накладывается...
Делал setColorTable и заполнял ее из ARGB[256] куска после данных, тогда картинка вообще белая -_-