Russian Qt Forum
Ноябрь 25, 2024, 08:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: QImage from 8-bit Raw data  (Прочитано 15725 раз)
OKTA
Гость
« Ответ #15 : Май 06, 2014, 12:40 »

А получается тоже самое - хоть через qGray, хоть через qRgb.
Тоже самое в плане искаженные цвета.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #16 : Май 06, 2014, 12:58 »

Вы должны получить "серое" изображение. Все цвета это оттенки серого. Правильно?
Если в картинке вы ожидаете другие цвета, то вам придется эту палитру формировать самому. Смотреть на картинку на каждую точку, брать ее индекс в палитре и устанавливать нужные значения RGB.
Записан
OKTA
Гость
« Ответ #17 : Май 06, 2014, 13:07 »

В этом-то и вся странность - задаю палитру через qGray как и советовал xokc, а в изображении появляются другие цвета - желтый, красный и т.д.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #18 : Май 06, 2014, 13:14 »

В этом-то и вся странность - задаю палитру через qGray как и советовал xokc, а в изображении появляются другие цвета - желтый, красный и т.д.
А палитру точно устанавливаете?
Покажите ваш код.
Записан
OKTA
Гость
« Ответ #19 : Май 06, 2014, 13:20 »

Код:
QImage image(reinterpret_cast<unsigned char*>(imageSrc->data()),
                    params.pixels_per_line, params.lines,
                    params.bytes_per_line, QImage::Format_Indexed8);

    QVector<QRgb> colors;
    for(int i = 0; i < 255; ++i)
        colors.append(qGray(i,i,i));

    image.setColorTable(colors);
    image.save("testImage.tiff");
Как понимаю, этого должно быть достаточно.
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #20 : Май 06, 2014, 13:26 »

В этом-то и вся странность - задаю палитру через qGray как и советовал xokc, а в изображении появляются другие цвета - желтый, красный и т.д.
Этого не может быть, потому что не может быть никогда. Улыбающийся Давайте код сюда. Видимо, что то Вы не так делаете либо когда палитру устанавливаете, либо когда получившийся QImage рисуете или сохраняете. Как вариант - выложите сюда тот самый исходный QByteArray, посмотрим что с ним не так. Можно ещё после setColorTable сделать bmp.save("c:/test.png") и посмотреть, что именно сохранится.
Записан
OKTA
Гость
« Ответ #21 : Май 06, 2014, 14:19 »

Так, ну вот файлики в аттаче. Изображение, которое получается при использовании кода, который я выше привел и исходное изображение - просто записанный в файл QByteArray.
Записан
xokc
Птица говорун
*****
Offline Offline

Сообщений: 976



Просмотр профиля
« Ответ #22 : Май 06, 2014, 14:36 »

    for(int i = 0; i < 255; ++i)
        colors.append(qGray(i,i,i));
Вы пропустили наш диалог с Old в начале топика относительно того, что цикл надо крутить до 256, а не до 255. У Вас в картинке всего два цвета - 0 и 255, а в палитре цвета 255 - нет, точнее он заполняется случайным цветом - поэтому и появляются "всякие разные цвета".
Записан
OKTA
Гость
« Ответ #23 : Май 06, 2014, 14:38 »

Ой, опечатка. Но от нее ничего не меняется к сожалению Обеспокоенный
Записан
OKTA
Гость
« Ответ #24 : Май 06, 2014, 14:40 »

О, кажется нашел косяк - ситуация исправляется, если ставить QRgb вместо QGray  Шокированный

Ну все, пока вопросов нет, всем спасибо!  Подмигивающий
« Последнее редактирование: Май 06, 2014, 14:49 от OKTA » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #25 : Май 07, 2014, 08:34 »

Igors, а что имелось ввиду под словом "флот"?
float
Да
Записан
OKTA
Гость
« Ответ #26 : Май 07, 2014, 11:24 »

Странная загадка)
Можно сделать мне кажется лишь используя таблицу цветов, чтобы изображение рисовалось, используя индекс по каждому каналу отдельно, а не общий цвет. Но если значения флоаты, то все не поместится в таблицу, если 4 байта на пиксель  Непонимающий
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #27 : Май 07, 2014, 11:40 »

Странная загадка)
Можно сделать мне кажется лишь используя таблицу цветов, чтобы изображение рисовалось, используя индекс по каждому каналу отдельно, а не общий цвет. Но если значения флоаты, то все не поместится в таблицу, если 4 байта на пиксель  Непонимающий
Этот формат довольно популярен и используется уже минимум лет 10. Да, хранится 4 байта, но используются 3 float (ну разумеется с какой-то потерей точности). Остряки часто называют это "ельфа"  Улыбающийся  
Записан
OKTA
Гость
« Ответ #28 : Май 07, 2014, 12:01 »

Чего-то я не нашел этого ельфа Смеющийся Дайте ссылку пожалуйста)
Из похожих нашел openEXR, но там без альфа-канала 6 байт на точку получается для чисел половинной точности.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #29 : Май 07, 2014, 12:08 »

Чего-то я не нашел этого ельфа Смеющийся Дайте ссылку пожалуйста)
http://en.wikipedia.org/wiki/RGBE_image_format

Из похожих нашел openEXR, но там без альфа-канала 6 байт на точку получается для чисел половинной точности.
Да, это основная альтернатива. Кстати "числа половинной точности" там не так уж просты.
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.158 секунд. Запросов: 23.