Russian Qt Forum
Февраля 19, 2025, 02:09
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
как лучше преобразовать массив в изображение?
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: как лучше преобразовать массив в изображение? (Прочитано 14802 раз)
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 сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...