Форум: "WinAPI";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Внизкак избавиться от мерцания? Найти похожие ветки [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 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.08.20;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.041 c