Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод большого массива пикселей на форму / 15 сообщений из 15, страница 1 из 1
20.08.2018, 12:28
    #39690337
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод большого массива пикселей на форму
Задача. Есть массив точек примерно 1000х1000, для простоты можно считать что это байты (градиенты серого). Для простоты можно считать что это разновидность карты высот (карта, где высота каждой точки может быть от 0 до 255) (не то же самое что карта смещений).
В начале все равны нулю.
Каждую секунду в процессор (обработчик данных в программе) приходит от 10 до 100 новых записей.
Каждая запись изменяет вплоть до нескольких тысяч точек (как правило, это добавление или удаление "слоя земли" в форме треугольника размерами около 500х50 точек).
Процессор (обработчик данных в программе) успевает принять и обработать данные, сформировав этот байтовый массив.

Вопрос в том, как вывести этот массив графически на форму в виде картинки 1000х1000 пикселей.
Однократно вывести вопросов не возникает. Вопрос в том, чтобы картинка обновлялась хотя бы раз в секунду и притом обновлялась целиком.
Сейчас рисую через Graphics2D и drawLine в событии paintComponent от JPanel, обновляю после каждых 20 новых записей через repaint() от JPanel. Но обновление происходит частично, начиная с верха панели и может нарисовать 10% или 80% картинке (как раньше в тетрисе сверху открывали картинки обнаженных дев). И так до следующего обновления, которое также может быть не полным.

Подскажите куда копать...

=//=
...
Рейтинг: 0 / 0
20.08.2018, 13:53
    #39690397
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод большого массива пикселей на форму
Aklin,
JavaFX все есть. Может перейти?
А в вашем примере непонятно почему частично?
У вас вся картинка как матрица должна быть готова. И выводить всю хоть 30 раз в сек.
...
Рейтинг: 0 / 0
20.08.2018, 14:16
    #39690416
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод большого массива пикселей на форму
Petro123У вас вся картинка как матрица должна быть готова.По идее то да. Я пока не нашел какой-то функции или вроде того, которая бы принимала матрицу и выводила бы ее без дополнительных манипуляций. Так то можно хранить не в виде байт а в виде Color к примеру.

А пока вожу по одному пикселю через drawLine, перебирая элементы в цикле. Была идея вместо матрицы хранить BufferedImage, и карту высот хранить сразу там, но пока не доделал...
...
Рейтинг: 0 / 0
20.08.2018, 14:32
    #39690432
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод большого массива пикселей на форму
Aklin,
Так и надо по пикселю выводить. Оптимизация вам пока не нужна.
Массив двухмерный 0...254 и будет ваша модель.
...
Рейтинг: 0 / 0
20.08.2018, 15:05
    #39690470
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод большого массива пикселей на форму
по пикселю - гарантированные тормоза. Тут жаловаться бесмысленно

Нужно подготавливать bitmap и выводить. В общем, ничего особого сложного быть не должно

IMHO & AFAIK
...
Рейтинг: 0 / 0
20.08.2018, 15:09
    #39690473
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод большого массива пикселей на форму
Leonid Kudryavtsev,
Ну, смотря что считать тормозом.
0,3 сек тормоз?
...
Рейтинг: 0 / 0
20.08.2018, 15:25
    #39690485
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод большого массива пикселей на форму
Зачем делать криво, когда можно сильно не напрягаясь сделать нормально

Если устанавливать цвет пикселей, то никто не сможет гарантировать, что не будет каких либо артифактов (например масштабирование, работа по сети X-Windows / X-Server). Работая с картинкой целиком, мы от этого застрахованы.
...
Рейтинг: 0 / 0
20.08.2018, 15:47
    #39690501
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод большого массива пикселей на форму
Leonid Kudryavtsev,
У него вопрос в обновлении частично.
Что само по себе странно.
А мы поведем большим кругом через архитектуру которая устарела.
Если правильно, то вообще JavaFX.
Там сцена и раскадровка есть.
...
Рейтинг: 0 / 0
20.08.2018, 16:28
    #39690538
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод большого массива пикселей на форму
мне вообще вопрос топик-стартера не очень понятен.

Т.к. туториалов по Java2D как "вывести картинку".... полно. Или нужен пример конкретного кода от ТС (что уже есть, желательно запускаемого) или получается какой-то RTFM на google.

Т.к. преобразовать массив байтов в массив растра - в общем-то 3-7 строк кода (две for, две {, одно присваивание + сборка цвета, два } итого 7 строк)
...
Рейтинг: 0 / 0
20.08.2018, 17:28
    #39690594
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод большого массива пикселей на форму
Leonid Kudryavtsev,
Да)
...
Рейтинг: 0 / 0
20.08.2018, 18:29
    #39690648
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод большого массива пикселей на форму
Кажется он что то хочет оптимизировать.

Заблаговременно..
...
Рейтинг: 0 / 0
20.08.2018, 18:32
    #39690649
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод большого массива пикселей на форму
mayton,
При этом запутывая следы фразой Paint() наполовину окна.
...
Рейтинг: 0 / 0
21.08.2018, 13:38
    #39691031
Aklin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод большого массива пикселей на форму
Текущий проект.

Что интересно: на windows проблем с перерисовкой нет.
На mac тупит.

Сейчас пользуюсь только статическими данными (генератор данных сгорел), поэтому не могу проверить толком на реальном источнике...
...
Рейтинг: 0 / 0
21.08.2018, 23:26
    #39691381
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод большого массива пикселей на форму
Code-style ужасен.
...
Рейтинг: 0 / 0
21.08.2018, 23:46
    #39691391
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод большого массива пикселей на форму
Машинально отметил:

ReentrantLock::unlock - в finally.
Аббревиатуры BT, IRA надо переименовать.
Map - пересекается со стандартным интерфейсом. Надо переименовать.

SerialPort - заглушить чтоб было удобно запускать без всяких портов для тестирования.
Повторяющиеся расчеты - заменить на temporary variable.
Код: java
1.
2.
3.
4.
                nx = MAP_W/2 + Math.cos(irn.angle * 3.14 / 180.0) * (irn.value / 100.0 * (MAP_W/2));
		ny = MAP_H/2 + Math.sin(irn.angle * 3.14 / 180.0) * (irn.value / 100.0 * (MAP_H/2));
		ox = MAP_W/2 + Math.cos(iro.angle * 3.14 / 180.0) * (iro.value / 100.0 * (MAP_W/2));
		oy = MAP_H/2 + Math.sin(iro.angle * 3.14 / 180.0) * (iro.value / 100.0 * (MAP_H/2));


Добавить больше static import.
В части анонимных классов можно свернуть синтаксис если поднятся до Java 1.8.
Висячие if заменить на Egypt-style bracers.

Чисто технически приложение работает. Каких-то особых тормозов при отрисовке не заметил.
(Linux).
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод большого массива пикселей на форму / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]