Перемещение рисунка по форме без мерцаний.

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: Перемещение рисунка по форме без мерцаний.

Сообщение coyot.rush » 30.11.2010 17:15:02

Двойная буферизация http://ru.wikipedia.org/wiki/%D0%94%D0%B2%D0%BE%D0%B9%D0%BD%D0%B0%D1%8F_%D0%B1%D1%83%D1%84%D0%B5%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F
Двойная буферизация или Анимация без мерцания http://delphiblog.ru/2007/double-buffering-delphi/

Перемещение рисунка по форме без мерцаний.

В общем нужно двигать картинку (картографический двиг) по форме без тормозов

Такое в принципе невозможно или быстро или качественно :!:
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Перемещение рисунка по форме без мерцаний.

Сообщение .wOvAN » 30.11.2010 17:57:56

Не вижу в чем проблема, накатал примерчик реализующий задачу 3-мя способами, кому интересно. Но не дело это графику рисовать стандартными путями, лучше directx или open GL.

http://savebit.ru/skmba0kibhe2.html
.wOvAN
постоялец
 
Сообщения: 118
Зарегистрирован: 16.04.2010 06:36:12

Re: Перемещение рисунка по форме без мерцаний.

Сообщение Sheleh » 01.12.2010 07:03:18

.wOvAN
Огромное спасибо за примерчик. Разбираюсь.

В идеале мне просто нужна функция, позволяющая отображать img по четырем его вершинам. Типа свободного трансформирования или StretchDraw() по четырем координатам.

Добавлено спустя 4 часа 53 минуты 9 секунд:
Огромное всем спасибо. Проблема была до ужаса банальна. TImage, на котором я рисовал мерцал из-за того, что располагался на TPanel. На чистой форме все работает очень гладко безо всяких OpenGL даже на стареньком ноуте (800мгц слерон со смешной видюхой). При том, что одновременно вырисовывается до 20 изображений 256*256.

Изображения рисуются в Application.OnIdle весьма банально:
MainLayer.Canvas.Draw(MapDim[I,J,2],MapDim[I,J,3],CacheImage[i].Picture.Bitmap);


Вот только на коммуникаторе это не так производительно, как на PC. Ищу в чем причина.
Sheleh
новенький
 
Сообщения: 24
Зарегистрирован: 12.11.2010 18:31:07

Re: Перемещение рисунка по форме без мерцаний.

Сообщение Sheleh » 03.12.2010 15:33:54

FedeX писал(а):...к тому же это не красиво выглядит - когда пользователь перемещает мышкой изображение, там откуда картинку убрали, что - просто пустое место? Мы делали когда-то как в гугломапсах, там на лету подгружаються кусочки, даже пока пользователь еще не отпустил мышку.

Координально переписал программу.
Теперь я двигаю не картинку, а на движение мыши просчитываю новые координаты тайлов. Плюс реализовал двойное кэширование картинок: в BMP (шт 30, иначе памяти много ест) для мгновенной прорисовки, и в PNG (штук 200 в виде TMemoryStream, а не TPortableNetworkGraphic, который занимает в памяти места больше чем TBitmap) что бы лишний раз не обращаться к диску.
Прорисовка происходит в Application.OnIdle

Итого: потребление памяти в моем варианте 20-26 мб в отличие от Sasplanet - 80мб
И в отличие от того же Sasplanet осутствуют "пустые места" при движении карты. Все подгружается до того, как пользователь отпускает мышь.
Sheleh
новенький
 
Сообщения: 24
Зарегистрирован: 12.11.2010 18:31:07

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13

Рейтинг@Mail.ru