C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
проблема с BitBlt
BOO!
Отправлено: 01.09.2005, 16:14


Не зарегистрирован









я загружаю несколько внеэкранных образов TBitmap:
CODE

 TailLayer=new Graphics::TBitmap;
 TailLayer->Width=4608;
 TailLayer->Height=3072;

 ALLLayer=new Graphics::TBitmap;
 ALLLayer->Width=4608;
 ALLLayer->Height=3072;

затем отрисовываю последний на канву объекта TImage:
CODE

void TForm1::Draw()
{


 BitBlt(ALLLayer->Canvas->Handle,0,0,LocalMap->Width,LocalMap->Height, TailLayer->Canvas->Handle,0,0,SRCCOPY);

 if (ShowTailGrid)
 {
   BitBlt(ALLLayer->Canvas->Handle,0,0,LocalMap->Width,LocalMap->Height, TailGrid->Canvas->Handle,0,0,SRCAND);
 }

 ReDrawRect=Rect(0,0,1024,768);
 BitBlt(LocalMap->Canvas->Handle,ReDrawRect.left,ReDrawRect.top,ReDrawRect.right,ReDrawRect.bottom, ALLLayer->Canvas->Handle,ReDrawRect.left,ReDrawRect.top,SRCCOPY);
}

При первом запуске функции все работает и отрисовывается нормально. Но последующие вызовы этой функции никчему не приводят, хотя ивестно, что во внеэкранных образах меняется содержимое.

Причем если провести каким то окном над моим Timage изменения проявляются!
Создается впечатление что канва просто не обновляется!
Подскажите как исправить или переделать или киньте инфу по теме.
Заранее спасибо!
Gedeon
Отправлено: 01.09.2005, 16:38


Ветеран

Группа: Модератор
Сообщений: 1742



image->Repaint();
BOO!
Отправлено: 01.09.2005, 20:04


Не зарегистрирован







Не так непойдет. Так изображение перерисовывается полностью, начинаются лаги. Можно как нибудь обновлять только часть изображения?
Или вообще можно еще как нибудь улучшить программу?(переход на д3д не предлагать)

Размер изображения: 1024*768.
BOO
Отправлено: 01.09.2005, 21:34


Не зарегистрирован







Я попробовал загрузить на канву изображение, а затем только вызывать метод refresh(); без отрисовки. Даже в этом случае появляется мигание!

Т.е. даже без отрисовки метод refresh(); достаточно тормозит :-(
olegenty
Отправлено: 02.09.2005, 06:33


Ветеран

Группа: Модератор
Сообщений: 2412



ControlStyle << scOpaque? — для родителей TImage
DoubleBuffered = true? — для TImage и его родителей
BOO
Отправлено: 02.09.2005, 19:21


Не зарегистрирован







>>ControlStyle << scOpaque? — для родителей TImage
DoubleBuffered = true? — для TImage и его родителей


Извиняюсь, но я не знаю как обратится к родителям объекта! ohmy.gif
А про свойтво я прочитал скорее всего то что надо.

Sl@Sh
Отправлено: 04.09.2005, 13:41


Мастер участка

Группа: Участник
Сообщений: 383



Скорее всего у вас родитель — форма. А у формы есть свойство DoubleBuffered. Поставте его в труй (только на время рисования, для экономии ресурсов). Должно помочь.

Вернуться в Вопросы программирования в C++Builder