Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Звук, графика и видео > Дрожание при выводе грфики


Автор: midiar 20.12.2005, 12:26
Добрый день!

У меня есть битмап, на котором я рисую и потом вывожу его на канву. Если это происходит часто, то изображение дрожит. Как этого можно избежать?

Автор: Snowy 20.12.2005, 12:29
Код

  Form1.DoubleBufered:=true;

Автор: midiar 20.12.2005, 12:55
Я редактирую компонент, а он унаследован от TGraphicControl.

Автор: Snowy 20.12.2005, 13:09
Цитата(Snowy @ 20.12.2005, 12:29)
DoubleBufered:=true;

Если наследовать от TWinControl.
Если нет, то используй GDI+ или посмотри, как сделано в TWinControl.WMPaint во второй части - где при DoubleBufered.

Автор: midiar 20.12.2005, 13:18
Я посмотрел и ничего не понял, я не умею хорошо работать с графикой. Но я все рисую и так в памяти на битмап, а потом вывожу ее с помощью BitBlt. Что там нужно сделать дополнительно?

Автор: Snowy 20.12.2005, 13:37
Перед рисованием вызывай
Код

function BeginPaint(hWnd: HWND; var lpPaint: TPaintStruct): HDC; stdcall;


После рисования
Код

function EndPaint(hWnd: HWND; const lpPaint: TPaintStruct): BOOL; stdcall;


TPaintStruct заполнять не нужно - просто отдай переменную этого типа бегину, а потом ее же енду.

BeginPaint вернет тебе DC, на котором нужно делать BitBlt.

Автор: midiar 20.12.2005, 13:47
А handle чей передавать?

Автор: Snowy 20.12.2005, 13:55
Owner'a я полагаю. Получается, что ты на нем рисуешь, раз уж у тебя не WinControl...
Или Parenta. Попробуй и того и другого.

Автор: midiar 20.12.2005, 14:01
Не помогает, я пробовал и код из TWinControl.WMPaint адаптировать, тоже не помогает. Здесь что-то другое smile

Автор: Snowy 20.12.2005, 14:12
Попробуй присвоить DoubleBufered:=true паренту или Owner'у. (или обоим сразу).

Автор: midiar 20.12.2005, 14:47
Ага, получилось, спасибо smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)