Уже разобрался, я так понял что в дате указан номер цвета из палитры. Прогоняю 256х256 цикл, но не получаю нужного)) Код взял из модельвивера. Получается такая фигня.
http://my.jetscreenshot.com/4271/20120325-gyd8-106kb
Код:
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();
// Заполнение цветов
quint32* p = new quint32[m_header.width * m_header.height];
quint8* c = uncompressed;
for (quint32 y = 0; y < m_header.height; y++)
{
for (quint32 x = 0; x < m_header.width; x++)
{
//ARGBColor8 k = m_header.colors[*c++];
quint32 k = m_header.colors[*c++];
k = ((k&0x00FF0000)>>16) | ((k&0x0000FF00)) | ((k& 0x000000FF)<<16);
k |= 255 << 24;
*p++ = k;//qRgba(k.r, k.g, k.b, 255);
}
}
uncompressed = reinterpret_cast<quint8*>(p);
QImage img(uncompressed, m_header.width, m_header.height, QImage::Format::Format_ARGB32);
return QPixmap::fromImage(img);
}
PS если убрать все эти манипуляции с uint32 и сделать мой вариант через стурктуру и преобразовение в rgba от qt то тоже самое.
Код:
for (quint32 x = 0; x < m_header.width; x++)
{
ARGBColor8 k = m_header.colors[*c++];
*p++ = qRgba(k.r, k.g, k.b, 255);
}