Форум: "Основная";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
ВнизПРоблема при копировании канвы TCustomControl в TBitmap.Canvas Найти похожие ветки
← →
Unknown user (2003-05-19 21:27) [0]Почему при копировании области канвы контрола методом CopyRect копируется еще и содержимое окон которые в данный момент находятся поверх контрола. Как от этого избавится? Мне нужно скопировать в буфер лишь то, что я рисую на канве.
← →
Юрий Зотов (2003-05-19 22:03) [1]Почему копируется... думаю, потому, что у всех окон "физический" device context как бы один и тот же - дисплей.
А как избавиться... можно, например, рисовать на временной канве в памяти, а уже с нее копировать готовую картинку на видимую канву и в буфер.
← →
Unknown user (2003-05-19 22:18) [2]To Юрий Зотов. Спасибо за идею, наверное это будет самым простым решением. Но в приложении которое я делаю критична скорость работы с графикой и предпочтительней все же рисовать сразу на видимой канве а затем копировать в картинку в буфер. Неужели то что отрисовано на канве под окном можно считать потеряным? И почему тогда я все таки рисую на канве своего контрола а не на перекрывающем его окне?
← →
default (2003-05-19 22:21) [3]я думаю от копирования твоё приложение мало что потеряет
← →
Unknown user (2003-05-19 22:31) [4]To default. Если отрисовка производится в потоке то пользователь не будет сидеть перед пустым экраном - ждать пока картинка отрисуется в памяти и скопируется на видимую канву, поэтому все же для повышения скорости вывода графики предпочтительней рисовать сразу на видимой канве.
← →
Dmk (2003-05-19 22:43) [5]var
HiddenDC:HDC;
PS:TPaintStruct;
HiddenDC := BeginPaint(Handle, PS);
{Вот на этом скрытом контексте и нарисованы
все ваши контролы, но до тех пор, пока
форма не изменит размеры или не произойдет
событие прокрутки. Этот буфер используется
системой для обновления областей при перекрытии
или движении форм поверх других форм.}
EndPaint(Handle, PS);
{Не забудьте, что каждый раз при изменении
формы этот контекст перерисовывается!}
← →
Dmk (2003-05-19 22:48) [6]Чо это я :) Даже вопрос не прочитал. Извиняюсь.
← →
Dmk (2003-05-19 22:49) [7]Вы лучше код представьте.
← →
Unknown user (2003-05-21 12:37) [8]To Dmk.
Procedure Paint;
begin
....
//если скопировано в память и изменений не было тогда копируем из памяти на канву
if FCashed and UseCashe then
try
Canvas.CopyRect(Canvas.ClipRect,FCashedBitmap.Canvas,Canvas.ClipRect);
finally
NeedsCashed:=false;
end;
....
//копируем в память после отрисовки
if NeedsCashed and UseCashe and not IsRectEmpty(Canvas.ClipRect) then
try
if FCashedBitmap.Width<>ClientWidth then FCashedBitmap.Width:=ClientWidth;
if FCashedBitmap.Height<>ClientHeight then FCashedBitmap.Height:=ClientHeight;
FCashedBitmap.Canvas.CopyRect(Canvas.ClipRect,Canvas,Canvas.ClipRect);
FCashed:=true;
except
FCashed:=false;
end;
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.06.02;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c