Russian Qt Forum
Ноябрь 22, 2024, 18:58
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
как лучше преобразовать массив в изображение?
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: как лучше преобразовать массив в изображение? (Прочитано 14491 раз)
Sahsa
Гость
как лучше преобразовать массив в изображение?
«
:
Сентябрь 02, 2015, 21:35 »
Есть массив типа float. Нужно на выходе получить изображения QImage и в дальнейшем изменять палитру полученного изображения.
Записан
Bepec
Гость
Re: как лучше преобразовать массив в изображение?
«
Ответ #1 :
Сентябрь 03, 2015, 00:20 »
Ххы построение из произвольного массива изображения? Круто
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: как лучше преобразовать массив в изображение?
«
Ответ #2 :
Сентябрь 03, 2015, 10:50 »
Цитата: Sahsa от Сентябрь 02, 2015, 21:35
Есть массив типа float. Нужно на выходе получить изображения QImage и в дальнейшем изменять палитру полученного изображения.
Ну должны быть какие-то соглашения, доп информация, напр сколько точек в строке, сколько строк и сколько float на точку. Тогда просто создаете QImage нужного размера и переводите по точкам, см QImage::bits. Палитра - я бы с ней не связывался, создал бы QImage::Format_ARGB32 и при изменении цвета опять бы переводил из исходных float.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: как лучше преобразовать массив в изображение?
«
Ответ #3 :
Сентябрь 03, 2015, 11:05 »
А что определяет каждый элемент типа флоат? Цвет? Высоту? Напряжение? Каким образом должен формироваться цветовой компонент каждой точки?
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Sahsa
Гость
Re: как лучше преобразовать массив в изображение?
«
Ответ #4 :
Сентябрь 03, 2015, 15:01 »
Цитата: Racheengel от Сентябрь 03, 2015, 11:05
А что определяет каждый элемент типа флоат? Цвет? Высоту? Напряжение? Каким образом должен формироваться цветовой компонент каждой точки?
Каждый элемент задаёт значение датчика на определённой глубине(временном отрезке).
Изображения, это как один из вида представления снятых показаний.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: как лучше преобразовать массив в изображение?
«
Ответ #5 :
Сентябрь 03, 2015, 15:03 »
Цитата: Sahsa от Сентябрь 03, 2015, 15:01
Каждый элемент задаёт значение датчика на определённой глубине(временном отрезке).
Изображения, это как один из вида представления снятых показаний.
Вы напишите, как это число должно быть преобразовано в цвет.
Вот число 100 - это какой цвет, а 200?
Записан
Sahsa
Гость
Re: как лучше преобразовать массив в изображение?
«
Ответ #6 :
Сентябрь 03, 2015, 15:06 »
Цитата: Igors от Сентябрь 03, 2015, 10:50
Цитата: Sahsa от Сентябрь 02, 2015, 21:35
Есть массив типа float. Нужно на выходе получить изображения QImage и в дальнейшем изменять палитру полученного изображения.
Ну должны быть какие-то соглашения, доп информация, напр сколько точек в строке, сколько строк и сколько float на точку. Тогда просто создаете QImage нужного размера и переводите по точкам, см QImage::bits. Палитра - я бы с ней не связывался, создал бы QImage::Format_ARGB32 и при изменении цвета опять бы переводил из исходных float.
Это порядка 700-800 столбцов и 1500 и больше строк. На каждую точку одно значения float.
А перерисовка изображения не будет в данном виде занимать много времени, так как при изменении палитры это происходит гораздо быстрее.
Записан
Sahsa
Гость
Re: как лучше преобразовать массив в изображение?
«
Ответ #7 :
Сентябрь 03, 2015, 15:09 »
Цитата: Old от Сентябрь 03, 2015, 15:03
Цитата: Sahsa от Сентябрь 03, 2015, 15:01
Каждый элемент задаёт значение датчика на определённой глубине(временном отрезке).
Изображения, это как один из вида представления снятых показаний.
Вы напишите, как это число должно быть преобразовано в цвет.
Вот число 100 - это какой цвет, а 200?
Создаётся палитра из 256 цветов. В зависимости минимального и максимального значения из массива составляется пропорция для отображения определённых значений, определённым цветом.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: как лучше преобразовать массив в изображение?
«
Ответ #8 :
Сентябрь 03, 2015, 15:13 »
Ну, карта высот, в общем)
Дык, а затруднение в чем возникает? У QImage есть метод scanLine, который возвращает поинтер на линию в изображении. Это просто набор байт согласно формату, в котором был создан QImage. Просто проходите высоту в цикле по i и получаете каждую строку через image.scanLine(i). Ну и соответвенно идете по строке от начала до конца и пишите туда цветовые значения, преобразовав float в нужное число.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: как лучше преобразовать массив в изображение?
«
Ответ #9 :
Сентябрь 03, 2015, 15:14 »
Цитата: Sahsa от Сентябрь 03, 2015, 15:09
Создаётся палитра из 256 цветов. В зависимости минимального и максимального значения из массива составляется пропорция для отображения определённых значений, определённым цветом.
Тогда, вам нужно каждый float преобразовать в uchar, минимальное значение float это 0, максимальное - 255.
Создаете QImage нужного размера с форматом QImage::Format_Indexed8 с полученными данными.
Устанавливаете вашу палитру через: void QImage::setColorTable(const QVector<QRgb> & colors).
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: как лучше преобразовать массив в изображение?
«
Ответ #10 :
Сентябрь 03, 2015, 18:12 »
Цитата: Sahsa от Сентябрь 03, 2015, 15:06
А перерисовка изображения не будет в данном виде занимать много времени, так как при изменении палитры это происходит гораздо быстрее.
Вряд ли, так или иначе в видеобуфер надо поместить 4 байта на точку. И нет уверенности что c Indexed8 это сильно (или вообще) быстрее. С др стороны отсекаются возможности которые могут пригодиться - ну напр показать "зашкаливающие" значения др цветом.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: как лучше преобразовать массив в изображение?
«
Ответ #11 :
Сентябрь 03, 2015, 18:44 »
Ну, у нас карта высот подобного размера в 3д в реальном времени строится и норм... А с QImage вообще не вижу причин для торможения.
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
Sahsa
Гость
Re: как лучше преобразовать массив в изображение?
«
Ответ #12 :
Сентябрь 03, 2015, 22:25 »
Цитата: Racheengel от Сентябрь 03, 2015, 15:13
Ну, карта высот, в общем)
Дык, а затруднение в чем возникает? У QImage есть метод scanLine, который возвращает поинтер на линию в изображении. Это просто набор байт согласно формату, в котором был создан QImage. Просто проходите высоту в цикле по i и получаете каждую строку через image.scanLine(i). Ну и соответвенно идете по строке от начала до конца и пишите туда цветовые значения, преобразовав float в нужное число.
на данный момент существует следующая проблема.
после формирование изображения, вылетает ошибка доступа на сохранении. Но при формировании тестовой 256*20 все происходит нормально. Размер 689*1500.
Вот код, может что-то не так(
QImage img(im, m_iTraceCount, m_iDiscreteCount, QImage::Format_Indexed8);
QVector<QRgb> palette;
for (int i = 0; i < 256; i++)
palette.append(qRgb(i, i / 4, 255 - i));
img.setColorTable(palette);
img.save("test.jpg", "JPG");
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: как лучше преобразовать массив в изображение?
«
Ответ #13 :
Сентябрь 04, 2015, 06:12 »
Как описан и как формируется im?
Записан
Sahsa
Гость
Re: как лучше преобразовать массив в изображение?
«
Ответ #14 :
Сентябрь 04, 2015, 07:11 »
Цитата: Old от Сентябрь 04, 2015, 06:12
Как описан и как формируется im?
Это массив uchar размерностью [m_iDiscreteCount * m_iTraceCount]
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...