Форум программистов, компьютерный форум CyberForum.ru

HBITMAP, CImage, BITMAP, CBitmap. Заблудился в трех березах. Где же выход? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
direct
0 / 0 / 0
Регистрация: 06.07.2010
Сообщений: 21
06.04.2012, 15:12     HBITMAP, CImage, BITMAP, CBitmap. Заблудился в трех березах. Где же выход? #1
имеется: дискриптор картинки с диска, структура BITMAP заполненная в соответствии с этой картинкой, объект CBitmap с "прикрепленным" дискриптором, все это очень замечательно выводится на экран.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*CString name;
    CRect rc;   
    HANDLE hBmp;
    BITMAP bm;
    HBITMAP   hbmpOld, hToSave;   - объявлены и опредлены в другом месте*/
 
           CClientDC dc(this);  
    CDC       dcMem;
    CBitmap   m_bmpBack;
 
    GetClientRect(&rc);  
    hBmp = LoadImage(NULL,name,IMAGE_BITMAP,0,0,LR_LOADFROMFILE);   
    GetObject ( hBmp, sizeof(bm), &bm );    
    m_bmpBack.Attach(hBmp); 
 
           dcMem.CreateCompatibleDC(&dc);
           hbmpOld = (HBITMAP)dcMem.SelectObject(m_bmpBack);    
 
    dc.StretchBlt(rc.left, rc.top, rc.right, rc.bottom,&dcMem, 0, 0, (int)bm.bmWidth, (int)bm.bmHeight, SRCCOPY);   
    dcMem.SelectObject(hbmpOld);
Хочу:
С помощью класса СImage сохранить из какого-либо из указаных объектов новый файл на диск, делаю в соответствии со всякой справочной литературой так:

C++
1
2
3
4
HBITMAP hToSave = (HBITMAP)m_bmpBack.GetSafeHandle();
CImage myImage; 
myImage.Attach(hToSave);
myImage.Save(L"d:/image3.jpg");
файл создается но в нем чернота, а должен быть андреевский флаг. Хотя при таком варианте (то есть без рисования и загрузки через дискрипторы):

C++
1
2
3
CImage myImage; 
myImage.Load(L"d:/bmp.bmp");    
myImage.Save(L"d:/image3.jpg");
все работает прекрасно. Похоже потери какие-то происходят при формировании HBITMAPа... Какие??? Кто чем можите поможите) Как запихнуть в CImage картинку нарисованную в контексте устройства?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.04.2012, 15:12     HBITMAP, CImage, BITMAP, CBitmap. Заблудился в трех березах. Где же выход?
Посмотрите здесь:

Рисование на CBitmap C++
MFC : CBitmap "своими руками" (из файла/генерация on-the-fly...) C++
C++ Запись из CBitmap в файл
Как работать с картинкой, зная HBITMAP C++
Где в коде ошибка (сравнение трех чисел) C++
Даны координаты трех точек на плоскости. Если они могут быть вершинами равнобедренного остроугольного треугольника, вычислить его площадь. Где ошибка? C++
Ищу бесплатные IDE, требования: аналог TBitmap или CBitmap C++
Создать базу из трех сотрудников, где будут храниться их имена C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 12:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru