Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.009 c
9-2736
Baradoo
2002-12-21 20:39
2003.06.02
Распространяю Свои Игры! Нужна помощь!


9-2729
Marser
2002-12-19 00:54
2003.06.02
DelphiX и множество спрайтов


14-3125
Skier
2003-05-12 16:42
2003.06.02
---|Ветка была без названия|---


14-3129
гончий
2003-05-14 16:20
2003.06.02
Кто-нибудь реально использует от TurboDb?


1-2994
Пубертанец
2003-05-21 16:28
2003.06.02
Как в OnShow формы уничтожать ее при определенных условиях?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский