Re: Порекомендуйте чем (готовым) Отобразить 20*5000 матрицу на экран fps >5..10
От: Географ Россия нет
Дата: 02.10.20 15:26
Оценка:
Здравствуйте, paradoks, Вы писали:

P>Приветствую!


P>Порекомендуйте чем (готовым,билиотека и тд) Отобразить 20*5000 матрицу на экран fps >1

P>матрица из 0 и 1, изменяется 1 раз в секунду
P>для Windows 7 и старше
P>идеально если решение встраивается в эксель (матрица это таблица в эксель)
P>Сначала сделал через закрашивание ячеек но не тянет по быстродействию и главное для 5 тыс строк или столбцов
P>не масштабируется (не уменьшить так сильно) в размер экрана и ломается.
P>Можно на VBasic, C# + Unity, можно на Дельфи, С# Develop — а студия не подходит ибо требует админских прав, а их нет и не будет — это жесткое условие.
P>Годится JS но готового компонента не нашел...
P>не хотелось бы с нуля изобретать велосипед
P>?

P>Примерно выглядеть могло бы так...

P>http://cliffle.com/p/m4vga/online/ если выбрать conway
P>исходников там не нашел. ккой-то русст компилированный в васм ...

Можно сделать на чём угодно, например на Дельфи, C#, C++, Java. Т.к. у Вас 20 х 5000 ячеек, то это явно не влезает в никакой формат монитора и надо делать прокрутку.
Раз речь об Экселе, то 20 — это, скорее всего, число столбцов, полагаю. Соответственно, 5000 — число строк.

Приличное GUI в стандартном оконном приложении Windows на любом из перечисленных языков обычно делают так:
а) создают обработчик обновления экрана
б) создают рабочий растр, который соответствует размерам окна и выводят его на экран при каждом запросе не обновление. Это — буфер экрана приложения.
в) можно создать и растр, соответствующий искомой матрице, увеличив каждую ячейку с 1 х 1 пиксел до скажем 5 х 5 (или любые другие разумные пропорции) пикселов. В моём примере растр будет 100 на 25000 пикселов (вытянутый по вертикали прямоугольник). Ничего особенного, в принципе, памяти хватит с лихвой. Это всего около 10 мегабайт памяти для максимального 4 байтового растра (Java: BufferedImage.TYPE_INT_RGB).

В этот большой растр синхронизировать поступающую информацию, чтобы он был всегда актуальным. При каждом изменении окна или информации обновлять экран приложения, выводя видимый кусок изменённого растра в буфер. Это очень быстрая операция. А уже буфер проецировать на окно приложения при запросах на обновление (смещении окон, изменения в большом растре).

Естественно, надо следить за прокруткой. Или сделать проще : использовать в окне курсор руки и, при движении мыши с зажатой Левой Клавиши Мыши (ЛКМ), смещать большой растр строго по вертикали, не обрабатывая смещения мыши по горизонтали, фиксируя текущие координаты смещения, выводя из на экран (или имея на большом растре дополнительную статическую разметку, позволяющую наблюдать номера строк данных. Отпустил ЛКМ — отображаешь в буфере новый кусок большого растра, который ещё и обновляется извне, синхронизуясь с информацией о ячейках.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.