crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> DXTC декомпрессия
sidsukana
  опции профиля:
сообщение 23.3.2012, 9:55
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


Понадобилось заняться графикой.
Есть файл с изображением законсервированный в DXT1/3.
Использую squish библиотеку для декомпрессии изображения, но наверное делаю что-то не так. Никак не получается вывести картинку, вместо нее набор цветопикселей :)

Функция для получения QPixmap из данных

QPixmap Texture::getImage()
{
    int mipmax = m_header.hasMips ? 16 : 1;

    QDataStream stream(m_buffer);
    stream.setByteOrder(QDataStream::LittleEndian);

    QVector<quint8> data;
    quint8 d = 0;

    for (quint8 i = 0; i < mipmax; i++)
    {
        stream.skipRawData(m_header.offsets[i]);
        for (quint32 j = 0; j < m_header.lengths[i]; j++)
        {
            stream >> d;
            data << d;
        }
    }
    
    QVector<quint8> v;
    v.resize(m_header.width * m_header.height * 16 * 4);
    squish::DecompressImage(&v[0], m_header.width, m_header.height, data.data(), m_header.encoding);

    QImage img(v.data(), m_header.width, m_header.height, QImage::Format::Format_ARGB32);

    return QPixmap::fromImage(img);
}


Изображение 256х256
С графикой сталкиваюсь впервые, особенно с форматом который не поддерживает Qt. В общем вот такая картинка выходит



Помогите разобраться, может неправильно загружаю в классы Qt ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 23.3.2012, 10:26
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2941
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


красиво, кстати ))

а ту же самую картинку в нормальном виде можно увидеть ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 23.3.2012, 11:56
Сообщение #3


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Цитата(sidsukana @ 23.3.2012, 10:55) *
Изображение 256х256
С графикой сталкиваюсь впервые, особенно с форматом который не поддерживает Qt. В общем вот такая картинка выходит
QImage img(v.data(), m_header.width, m_header.height, QImage::Format::Format_ARGB32);


Для того чтоб так делать, надо быть четко уверенным, что байтовый формат в v.data() соответствует QImage::Format_ARGB32

Оч. похоже на то, что там не ARGB32 лежит.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 23.3.2012, 16:18
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


Формат http://en.wikipedia.org/wiki/.BLP :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 24.3.2012, 9:56
Сообщение #5


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


Ну что, есть тут эксперты графики? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 26.3.2012, 8:43
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Цитата(sidsukana @ 23.3.2012, 17:18) *

То что ты привел описание заголовка формата это хорошо, но нужно смотреть на то что возвращает функция decompress, которой ты пользуешься для получения распакованной картинки. Судя по описанию заголовка формата, там не обязательно будет RGBA32 на выходе.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 26.3.2012, 11:18
Сообщение #7


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

Спасибо сказали: 10 раз(а)




Репутация:   2  


Уже разобрался :) Не правильно палитру считывал, точней правильно но не обратил внимание когда первый раз у меня картинка белая была - альфа по умолчанию 0 в палитре. Выставил 255 и все проявилось. А формат indexed8 както так.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.12.2024, 11:40