WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Как присвоить один CBitmap другому?

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Как присвоить один CBitmap другому?
BeeHolder опубликован 14-11-2001 10:48 MSK   Click Here to See the Profile for BeeHolder   Click Here to Email BeeHolder  
Есть класс
class MyClass
{
...
CBitmap bmp;
void SetBitmap(CBitmap *p_bmp);
...
}

В void MyClass::SetBitmap(CBitmap *p_bmp) надо проделать операцию, по смыслу аналогичную bmp = *p_bmp. Т.е. дублировать данные из одного CBitmapa в другой. Как это сделать?
Пробовал dw_size = p_bmp->GetBitmapBits(dw_size, buffer) и bmp.SetBitmapBits(dw_size, buffer).
Биты берет, а делать Set... не хочет.
Если делать через DC, то надо создавать CompatibleDC, а compatible чему?

rodion опубликован 14-11-2001 16:27 MSK     Click Here to See the Profile for rodion  Click Here to Email rodion     
в Bildere таких проблем нет...
Это некрасиво, но можно по байтно все скопировать.
BeeHolder опубликован 14-11-2001 18:13 MSK     Click Here to See the Profile for BeeHolder  Click Here to Email BeeHolder     
К сожалению, Builder`ом я не пользуюсь.
А побайтное копирование не работает. Get/Set bitmapBits примерно это и делает, но заголовки, насколько я понимаю, не трогает. Поэтому получается полная фигня. Точнее, ничего не получается :(
SUnteXx опубликован 15-11-2001 12:40 MSK     Click Here to See the Profile for SUnteXx  Click Here to Email SUnteXx     
2BeeHolder: А как при помощи MVC++ v.6.0???
BeeHolder опубликован 15-11-2001 10:15 MSK     Click Here to See the Profile for BeeHolder  Click Here to Email BeeHolder     
Вот мне самому и интересно - а как это сделать с использованием MCVC6. Насколько я понял, CBitmap не хранит непосредственно байты изображения, а хранит хэндл на них.
Kosha опубликован 15-11-2001 15:26 MSK     Click Here to See the Profile for Kosha  Click Here to Email Kosha     
Попробуй поюзать CreateBitmapIndirect, потом его заселектить в CDC,сделать BitBlt, и CBitmap::FromHandle
BeeHolder опубликован 15-11-2001 15:55 MSK     Click Here to See the Profile for BeeHolder  Click Here to Email BeeHolder     
Спасибо. CreateBitmapInderect помогло. Правда не знаю, на сколько корректно это работает, но работает.
Получилось примерно так:
CBitmap *p_bmp; //указатель на исходный CBitmap
CBitmap m_bmp ; //целевой CBitmap

BITMAP bmpInfo;
BYTE *pb; //буфер для изображения
DWORD dw; //размер изображения

p_bmp->GetBitmap(&bmpInfo);
dw = bmpInfo.bmHeight * bmpInfo.bmWidth * bmpInfo.bmBitsPixel;
pb = new BYTE[dw];
dw = p_bmp->GetBitmapBits(dw, pb);
m_bmp.CreateBitmapIndirect(&bmpInfo);
m_bmp.SetBitmapBits(dw, pb);
delete[]pb;

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.