Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как избавиться от мерцания? [GDI] [D7, WinXP]


Creative ©   (2006-04-28 14:10:00) 

WM_PAINT:
      begin
       DC:=BeginPaint(hwnd, PS);
       SetRect(R, 0,0, 200, 200);
       FillRect(DC, R, COLOR_WINDOW);
       case Color of
       0:
       begin
       Bmp:= TBitmap.Create;
       Bmp.Handle:= LoadBitmapFromFile('F_01.bmp');
       DrawTransparentBmp(DC, 0, 0, Bmp, $FFFFFF);
       end;
       1:
       begin
       Bmp:= TBitmap.Create;
       Bmp.Handle:= LoadBitmapFromFile('F_02.bmp');
       DrawTransparentBmp(DC, 0, 0, Bmp, $FFFFFF);
       .......
       end;

Получается простенький мультик из произвольного количества кадров. Так как битмапы выводятся с прозрачным фонов, то перед прорисовкой каждого кдра на месте выводя рисуется прямоугольник цвета фона окна. Но при запуске все это дело ужасно мерцает. Как от этогоизбавиться? (NB: если выводить битмапы с фоном - все смотрится очень гладко и без мерцания).

PS: Если можно, не отвечайте в духе "бросай рисовать на GDI, переходи на OpenGL".


Eraser   (2006-04-29 01:53:00) [1]


> Creative   (28.04.06 15:16) [2]
>
> > MBo ©   (28.04.06 15:04) [1]
> > Кроме того, что делается в WM_ERASEBKGND?
>
> не могли бы вы пояснить это свое замечание?

скорее всего грабли именно в этом. Надо просто перекрыть это сообение и ничего не выполнять при его вызове.
Как инициируется прорисовка кадра?


KygECHuK   (2006-04-28 15:28:00) [2]

Попробуй сделать ещё один Bitmap под буффер и в него сначала рисовать задний фон анимации, а затем новое изображение. И за один раз вывести содержимое буффера.


Creative   (2006-04-28 15:16:00) [3]

> MBo ©   (28.04.06 15:04) [1]
> Кроме того, что делается в WM_ERASEBKGND?

не могли бы вы пояснить это свое замечание?


MBo   (2006-04-28 15:04:00) [4]

Не нужно делать долгие операции в WM_PAINT - хотя это и накладно, возможно, стоит загружать битмапы один раз.
Кроме того, что делается в WM_ERASEBKGND?


Наверх

Титульная страница Поиск, карта сайта Написать письмо