Я использую версию R2007a.
Сначала небольшая предыстория: я создаю инструмент, который накапливает точечный график из данных, полученных в режиме реального времени. Когда количество точек становится достаточно большим, обновление графики не успевает за поступающими данными, поэтому я использую 'painters'
с 'EraseMode'
, установленным на 'none'
, и просто выполняю set(obj,'xdata',...,'ydata',...)
для обновления положения точки графика. Это работает очень хорошо.
Кстати, я обнаружил приятный трюк: включив двойную буферизацию, MATLAB всегда имеет копию изображения в памяти, поэтому точки накапливаются в изображении, даже когда окно скрыто или свернуто!
Теперь я хотел бы захватить каждое изображение, чтобы создать фильм. Я видел множество решений с использованием getframe()
, addframe()
и недокументированного hardcopy()
. Все они перерисовывают фигуру, и старые точки теряются, но на самом деле это то, что я могу обойти при постобработке. Моя проблема в том, что эти функции слишком медленные для скорости сбора данных. С тик / так, я нахожу
tic, getframe(h); toc - 0.13 sec
tic, addframe(h); toc - 0.15 sec
tic, hardcopy(h,'-Dpainters','r0'); toc - 0.07 sec
Я вижу, что hardcopy()
делает что-то другое с 'renderer'
, установленным в 'painters'
, но даже если бы я мог узнать, как использовать его вывод, он все равно слишком медленный.
Но при включенной двойной буферизации изображение уже находится в резервном хранилище/заднем буфере. Сделать копию этого было бы довольно быстро. Могут ли какие-нибудь хакеры выяснить, как получить указатель на резервное хранилище и сделать его копию?
Спасибо