Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
31 / 27 / 8
Регистрация: 25.05.2015
Сообщений: 113
1

Как из CPictureHolder получить Bitmap(GDI+) ?

04.03.2016, 19:47. Показов 1149. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Подскажите пожалуйста, как из CPictureHolder получить Bitmap(GDI+) ?
Решение использовать GDI+ пришло потому, что мне надо вращать картинки в моем activex (написан на C++ и MFC). Я знаю, что это можно сделать и на GDI через StretchBlt, но я хочу на GDI+
Ниже приведу код моей функции OnDraw, чтобы было понятнее, что я хочу сделать.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Graphics graphics(pdc->m_hDC);
Bitmap bmp(rcBounds.Width(), rcBounds.Height());
 
Graphics* pMemoryGraphics = Graphics::FromImage(&bmp);
 
//BMP, GIF, JPEG, PNG, TIFF, Exif, WMF, EMF
Bitmap* image = new Bitmap(_T("C:\\silo.emf")); //Вот здесь надо получить не из файла, а из CPictureHolder
 
//Здесь происходит вращение картинки. Потом добавиться больше...
if (flipHorizontal & flipVertical)
    image->RotateFlip(RotateNoneFlipXY);
else if (flipHorizontal)
    image->RotateFlip(RotateNoneFlipX);
else if (flipVertical)
    image->RotateFlip(RotateNoneFlipY);
 
pMemoryGraphics->DrawImage(image, 0, 0, rcBounds.Width(), rcBounds.Height());
delete(image);
//Создаю шрифт для надписи
Font font(pdc->m_hDC, m_font.GetFontHandle());
//Создаю кисть для надписи
Color foreColor;
foreColor.SetFromCOLORREF(TranslateColor(GetForeColor()));
SolidBrush* brush = new SolidBrush(foreColor);
 
pMemoryGraphics->DrawString(InternalGetText(), InternalGetText().GetLength(),
        &font, PointF(textPositionX, textPositionY), brush);
 
//Удаляю созданный ранее объект кисти
delete(brush);
 
graphics.DrawImage(&bmp, rcBounds.left, rcBounds.top, rcBounds.Width(), rcBounds.Height());
DoSuperclassPaint(pdc, rcBounds);
Если сделать так:
C++
1
2
3
HBITMAP hBitmap = NULL;
pic1.m_pPict->get_Handle((OLE_HANDLE FAR *) &hBitmap); //pic1 это CPictureHolder
Bitmap* image = Bitmap::FromHBITMAP(hBitmap, NULL);
то я получаю картинку, но только bmp, jpg, png (не векторные), а как быть с emf и wmf ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2016, 19:47
Ответы с готовыми решениями:

A generic error occurred in GDI+." при сохранении Bitmap
Доброго времени суток. Помогите, пожалуйста разобраться: Пишу консольное приложение, открываю...

Как получить Bitmap из HBITMAP
Вот такой код должен получать снимак экрана и выводить его в pictureBox HDC scrdc, memdc; HBITMAP...

Как получить контекст устройства Bitmap?
Всем здравствуйте. Хочу рисовать на Bitmap средствами API. От Bitmap переходим к объекту...

Как по адресу фотографии fileUri получить Bitmap?
Как можно по адресу фотографии fileUri получить Bitmap? мне все не найти как в коде расписать это...

0
04.03.2016, 19:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2016, 19:47
Помогаю со студенческими работами здесь

Как получить заголовок Bitmap и его размер в памяти?!
Есть загруженный битмапа в памяти, они находятся в контексте (DC). Как мне получить заголовок...

Как создать bitmap из области (по координатам пикселей) другого bitmap
Здравствуйте. Подскажите пожалуйста как создать bitmap из области(по координатам пикселей) другого...

Есть ли в WPF полноценная замена GDI+? Чтобы можно было всё, что можно в GDI+? Просто думаю углубляться в работу с изображениями в WPF или GDI.
Ну собственно весь вопрос в заголовке темы.

Как нарисовать Bitmap на Bitmap?
Bitmap1->Canvas->Draw(1,1,Bitmap2); Так не работает, хотя с Image проходило.


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru