|
|
|
maxi91m |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 191 Регистрация: 14.1.2007 Где: Нижний Новгород Репутация: нет Всего: нет |
Помогите разобраться в Qimage
Есть трехмерный массив данных(данные могут быть целого не отрицательного типа) Массив создан динамически, данные считаны из бинарного файла. Необходимо добиться максимально быстрого отображения полученного данных в градациях серого. Объясните как лучше передавать данные в QImage. Данные в массиве в виде одного числа, как мне уложить это число в QByteArray? Если QImage, как я понял хранит данные в виде пикселов(три компоненты), то мне надо размножить мое число(положим, что в массиве числа от 0-255) Например есть число типа int 123 в массиве, тогда в массив QByteArray мне необходимо записать три подряд одинаковых числа, чтобы задать значение одного пиксела, ТАК? int QByteArray 123 (123 123 123) а так как QByteArray содержит char то мне необходимо сделать преобразование типа из int в char Так все на самом деле, или нет? Если устанавливать по писелам, то будет тормознуто? Какой лучше виджет использовать для отображения QImage, если потом поверх полученного изображения необходимо вывести еще графические данные(что то вроде линии, которая показывает место среза в других плоскостях), через которые можно будет управлять данными выводимыми на других виджетах? --------------------
|
|||
|
||||
Jeka178RUS |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 85 Регистрация: 3.9.2012 Репутация: нет Всего: нет |
Используй http://qt-project.org/doc/qt-4.8/qimage.html#QImage-4
с форматом QImage::Format_Indexed8 А теперь внимание вопрос: почему исходный массив трехмерный? |
|||
|
||||
maxi91m |
|
||||||
Бывалый Профиль Группа: Участник Сообщений: 191 Регистрация: 14.1.2007 Где: Нижний Новгород Репутация: нет Всего: нет |
массив трехмерный, потому что данные в файле это значения снятые на МРТ, в трехмерном пространстве. Каждый срез массива представляет какую то картинку, и ее надо вывести в градациях серого. Пишу
получаю
что я делаю не так? Так получилось
Но вопрос остается, что я делаю не так с QByteArray Это сообщение отредактировал(а) maxi91m - 23.4.2013, 19:19 --------------------
|
||||||
|
|||||||
Amp |
|
|||
Опытный Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
Format_Indexed8 подразумевает наличие палитры.
|
|||
|
||||
maxi91m |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 191 Регистрация: 14.1.2007 Где: Нижний Новгород Репутация: нет Всего: нет |
Если передавать uchar buffer[16] то все нормально(без установки палитры) пикселы закрашиваются, но не работает
а с QByteArray не получается и просто вывести пикселы не получается. --------------------
|
|||
|
||||
Amp |
|
|||
Опытный Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
У тебя loadFromData наверняка вернул 0, потому что он не принимает такие сырые данные.
Добавлено через 13 минут и 57 секунд Как-то так. Причем надо учесть, что в исходном массиве данные должны быть выровнены на границу слова.
|
|||
|
||||
maxi91m |
|
||||||
Бывалый Профиль Группа: Участник Сообщений: 191 Регистрация: 14.1.2007 Где: Нижний Новгород Репутация: нет Всего: нет |
Точно, вернул false А в чем сырость данных заключается, передаю же в QByteArray такой массив
Ваш код вывел мне
но я не пойму если изображение 2x2 то в него попали только четыре нуль, а это значит что должно выводить четыре красных цвета, а вывело 2 красных и 2 других. Как данные асcоцеируются из массива с QImage? я думал значение с пикселом, а тут как-то иначе. Это сообщение отредактировал(а) maxi91m - 23.4.2013, 20:39 --------------------
|
||||||
|
|||||||
Amp |
|
|||
Опытный Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
||||
|
||||
maxi91m |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 191 Регистрация: 14.1.2007 Где: Нижний Новгород Репутация: нет Всего: нет |
А чем тогда отличаются данные uchar? такие же числа лежат. --------------------
|
|||
|
||||
Amp |
|
|||
Опытный Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
Твои данные не являются ни jpg, ни png, ни tga, ни bmp, ни каким-либо другим форматом, который поддерживает Qt. Это просто raw bitmap data в формате, который только тебе и известен. loadFromData читает массив данных и если формат прямо не задан, то метод по первым байтам и известным сигнатурам пытается определить с чем имеет дело. Естественно ничего не выходит и он возвращает false. В документаци все подробно написано.
|
|||
|
||||
maxi91m |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 191 Регистрация: 14.1.2007 Где: Нижний Новгород Репутация: нет Всего: нет |
С этим разобрались, теперь надо понять, по какому принципу надо укладывать данные в массив uchar? в вашем случае, когда создаешь таблицу цветов, просто если ее не создавать, каждый элемент массива это цвет пиксела в градациях серого(0-255). А у вас не пойму по какому алгоритму идет присвоение цвета пикселу, и сколько чисел отвечают за один пиксел( по логике 2)? После длительного изменения параметров прихожу к выводу что длина слова 4 байта, а значит каждый раз надо добивать каждую строку. Так? Это сообщение отредактировал(а) maxi91m - 23.4.2013, 22:20 --------------------
|
|||
|
||||
Jeka178RUS |
|
|||
Шустрый Профиль Группа: Участник Сообщений: 85 Регистрация: 3.9.2012 Репутация: нет Всего: нет |
Если хочешь использовать QByteArray c QImage используй метод data() в качестве параметра конструктора.
Палитру можешь задать как указано тут http://stackoverflow.com/questions/1367809...-image-using-qt |
|||
|
||||
maxi91m |
|
||||
Бывалый Профиль Группа: Участник Сообщений: 191 Регистрация: 14.1.2007 Где: Нижний Новгород Репутация: нет Всего: нет |
Вываливается
убираю qDebug() << QColor(img.pixel(1, 1)); то все собирается. Что тут не так? ------------------------------------------ Вопрос снимается, там и правда лежали данные которые вне диапазона палитры Это сообщение отредактировал(а) maxi91m - 24.4.2013, 21:37 --------------------
|
||||
|
|||||
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |