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

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

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

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

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

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

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

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

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

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

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

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

Сейчас пользуюсь только статическими данными (генератор данных сгорел), поэтому не могу проверить толком на реальном источнике...
...
Рейтинг: 0 / 0
Вывод большого массива пикселей на форму
    #39691381
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Code-style ужасен.
...
Рейтинг: 0 / 0
Вывод большого массива пикселей на форму
    #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
15 сообщений из 15, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Вывод большого массива пикселей на форму
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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