Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод на CDC:проблема с мерцанием анимации ! Нужна буферизация многослойной анимации! 
:(
    Опции темы
Александр
  Дата 11.9.2002, 18:26 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Возникла ужасная проблема :

анимация рисуется так :

void CMainWindow::OnPaint()
{
 CPaintDC dc(this); // device context for painting

 //  грубо говоря переход на метод
 //нижний большой слой (дальний план )
 Bitmap1.PaintResourseBitmap(&dc,какой  либо Rect , какой либо Rect)
 //средний слой   (средний план )
 Bitmap2.PaintResourseBitmap(&dc,какой  либо Rect , какой либо Rect)
 //верхний слой ( ближний план )
 Bitmap3.PaintResourseBitmap(&dc,какой  либо Rect , какой либо Rect)

}

 //рисовалка BMP
 HRESULT MYBITMAP::PaintResourceBitmap(CDC *pDC, CRect *Rect,CRect * ShiftInto)
{
 BITMAP bmpInfo;
   GetBitmap(&bmpInfo);
       CDC dcMemory;
   dcMemory.CreateCompatibleDC(pDC);
               
   dcMemory.SelectObject(this);
         
       int nX = Rect->left+ShiftInto->left;
   int nY = Rect->top+ShiftInto->top;
       int szx,szy;

       szx=bmpInfo.bmWidth-ShiftInto->right-ShiftInto->left;
       szy=bmpInfo.bmHeight-ShiftInto->bottom-ShiftInto->top;

       pDC->BitBlt(nX,nY ,szx ,szy , &dcMemory, ShiftInto->left,
ShiftInto->top, SRCCOPY);

 retun S_OK;
}

 понятно , что при перерисовке слоев анимация будет мерцать .
 Необходимо проводить операции через tempDC ( временный буфер ) , а
 потом когда все выстроено переносить изображение на dc экрана .

 то есть

 tempDC.CreateCompartibleDC(&dc);

//нижний большой слой (дальний план )
 Bitmap1.PaintResourseBitmap(&tempDC,какой  либо Rect , какой либо Rect)
 //средний слой   (средний план )
 Bitmap2.PaintResourseBitmap(&tempDC,какой  либо Rect , какой либо Rect)
 //верхний слой ( ближний план )
 Bitmap3.PaintResourseBitmap(&tempDC,какой  либо Rect , какой либо Rect)


 а потом все содержимое tempDC перенести на экран.

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

Если можно - киньте пожалуйста алгоритм вывода (если не затруднит ) , либо дайте совет .
Заранее спасибо , Александр .


mailto : [email protected]
  Вверх
merz
Дата 17.9.2002, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 18.4.2002

Репутация: нет
Всего: нет



Смотри
virtual BOOL CreateCompatibleDC( CDC* pDC );
и
BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop );
PM MAIL YIM   Вверх
Seregy
Дата 18.9.2002, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 30.7.2002

Репутация: нет
Всего: нет



Насколько я понял, у тебя все правильно делается с точки зрения использования контекста памяти в качестве промежуточного буфера изображения и последукющего блиттинга.
Поэтому еще с помощью DirectDraw можно попробовать.
(Пиши на [email protected], вышлю пример)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0648 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.