Как скрыть IWICBitmapSource в HBITMAP?
Легко создать IWICBitmap из HBITMAP с помощью метода CreateBitmapFromHBITMAP
factory. Но как получить простой GDI bitmap от 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());
Нет никакой гарантии, что за кулисами
IWICBitmapSource
даже использует растровое изображение GDI. Вы можете получить доступ к необработанным битам с помощью методаIWICBitmap::Lock
, но если вы хотите использовать растровое изображение с функциями GDI, я думаю, вам нужно будет создать растровое изображение GDI и скопировать биты в него самостоятельно.