Как конвертировать IWICBitmapSource в HBITMAP?

Легко создавать IWICBitmap из HBITMAP с CreateBitmapFromHBITMAP заводской метод. Но как получить простое растровое изображение GDI из IWICBitmapSource?

2

Решение

К сожалению, нет возможности конвертировать IWICBitmap к HBITMAPили получить один из IWICBitmapSource, Вы могли бы, однако, легко создать HBITMAP из пиксельного буфера, если формат совместим с чем CreateBitmap надеется.

Предполагая 32-битное растровое изображение RGBA:

IWICBitmapSource *bitmap_source = some_func();

UINT width = 0, height = 0;
bitmap_source->GetSize(&width, &height);

std::vector<BYTE> buffer(width * height * 4);
bitmap_source->CopyPixels(0, width * 4, buffer.size(), buffer.data());

HBITMAP bitmap = CreateBitmap(width, height, 1, 32, buffer.data());
4

Другие решения

Там нет гарантии, что за кадром IWICBitmapSource даже использует растровое изображение GDI. Вы можете получить доступ к необработанным битам, используя IWICBitmap::Lock метод, но если вы хотите использовать растровое изображение с функциями GDI, я думаю, вам нужно будет создать растровое изображение GDI и скопировать биты в него самостоятельно.

1

По вопросам рекламы [email protected]