Вниз
Скачать: CL | DM;

как избавиться от мерцания?   Найти похожие ветки [GDI]

 
Creative   (2006-04-28 14:10) [0]

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".


 
MBo ©   (2006-04-28 15:04) [1]

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


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

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

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


 
KygECHuK ©   (2006-04-28 15:28) [3]

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


 
Eraser ©   (2006-04-29 01:53) [4]


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

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



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.026 c
1-1152192172
Oleon
2006-07-06 17:22
2006.08.20
Какое событие возникает при создании MDIChild?


4-1144670484
Acidlex
2006-04-10 16:01
2006.08.20
Измерение уровня входного сигнала звуковой карты


2-1154109859
Lexx_Lamer
2006-07-28 22:04
2006.08.20
Вот задачка!!!


15-1153703182
Гриха(пароль забыл)
2006-07-24 05:06
2006.08.20
Самокопирование


15-1153567300
Николай из Москвы
2006-07-22 15:21
2006.08.20
Продается компьютер




   Наверх