Главная страница
    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.58 MB
Время: 0.031 c
1-2934
Polar
2003-05-20 19:06
2003.06.02
Как сделать округление чисел? Уже достало 1.234567890Е0002!!!


3-2825
VeLeS
2003-05-15 15:24
2003.06.02
как заставить маску понимать значение NULL?


11-2834
antonioxxx
2002-09-06 19:59
2003.06.02
Проблема с компиляцией.


14-3159
Checist [root]
2003-05-09 15:19
2003.06.02
WinAPI


3-2826
Cranium
2003-05-12 20:58
2003.06.02
Как в клиентском приложении корректно обработать ситуацию ...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский