![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как избавиться от мерцания? [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?