31 / 27 / 8
Регистрация: 25.05.2015
Сообщений: 113
1

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

04.03.2016, 19:47. Показов 1199. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
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
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетных компьютеров началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
Как определить, содержит ли строка подстроку в JavaScript
InfoMaster 19.01.2025
При разработке веб-приложений часто возникает необходимость выполнять различные операции со строками, среди которых особое место занимает поиск подстрок. JavaScript предоставляет несколько встроенных. . .
Что такое метаклассы в Python
InfoMaster 19.01.2025
Метаклассы в Python представляют собой один из самых мощных и одновременно сложных механизмов языка, позволяющий программистам контролировать процесс создания классов. По своей сути, метакласс. . .
Как удалить свойство из объекта JavaScript
InfoMaster 19.01.2025
В современной веб-разработке объекты JavaScript играют фундаментальную роль в организации и структурировании данных. Они представляют собой контейнеры, которые хранят связанные данные и. . .
Какая разница между String и string в C#
InfoMaster 19.01.2025
В языке программирования C# существует интересная особенность: для работы со строками можно использовать как String, так и string. Эта двойственность часто вызывает вопросы у разработчиков, особенно. . .
Как в Git откатить репозиторий к предыдущему коммиту
InfoMaster 19.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса, предоставляя разработчикам мощные инструменты для управления изменениями в. . .
Как работают замыкания (closure) в JavaScript
InfoMaster 19.01.2025
В мире современной веб-разработки замыкания (closures) представляют собой один из фундаментальных концептов языка JavaScript, который часто вызывает затруднения у начинающих разработчиков, но при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru