Автор
|
Тема: Как присвоить один CBitmap другому?
|
BeeHolder |
опубликован 14-11-2001 10:48 MSK
Есть класс 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
в Bildere таких проблем нет... Это некрасиво, но можно по байтно все скопировать. |
BeeHolder
|
опубликован 14-11-2001 18:13 MSK
К сожалению, Builder`ом я не пользуюсь. А побайтное копирование не работает. Get/Set bitmapBits примерно это и делает, но заголовки, насколько я понимаю, не трогает. Поэтому получается полная фигня. Точнее, ничего не получается :( |
SUnteXx
|
опубликован 15-11-2001 12:40 MSK
2BeeHolder: А как при помощи MVC++ v.6.0??? |
BeeHolder
|
опубликован 15-11-2001 10:15 MSK
Вот мне самому и интересно - а как это сделать с использованием MCVC6. Насколько я понял, CBitmap не хранит непосредственно байты изображения, а хранит хэндл на них. |
Kosha
|
опубликован 15-11-2001 15:26 MSK
Попробуй поюзать CreateBitmapIndirect, потом его заселектить в CDC,сделать BitBlt, и CBitmap::FromHandle |
BeeHolder
|
опубликован 15-11-2001 15:55 MSK
Спасибо. 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; |