winapi - 如何从 windcodecs api IWICBitmapDecoder、IWICBitmap 或 IWICImagingFactory 获取 GDI 兼容位图?
问题描述
这篇文章是我在How to acquire instance of IWICImagingFactory in winapi-rs 中提到的问题的延续,最初是在How to pass a reference as a pointer of type of [sometype;1] in rust? .
现在我已经找到了一种使用 COM API 对存储在可执行文件中的 BMP 文件进行易出错的解析的方法,我尝试将它们与需要类型的 winGDI(尤其是SelectObject()
和)一起使用。DeleteObject()
HGDIOBJECT
搜索到与 GDI 兼容的位图的转换最终给我留下了这样的结果:
let mut pFactory: *mut c_void = zeroed();
let hr = CoCreateInstance(&CLSID_WICImagingFactory as *const IID,
null_mut(),
CLSCTX_INPROC,
&IWICImagingFactory::uuidof(),
&mut pFactory as *mut *mut c_void);
let mut pBmp: *mut IWICBitmap = zeroed();
let hr = (pFactory as *mut _ as *mut IWICImagingFactory)
.as_ref()
.unwrap()
.CreateBitmapFromMemory(
size.cx as u32,
size.cy as u32,
&GUID_WICPixelFormat24bppRGB,
(buffer.len() as u32 / size.cy as u32),
buffer.len() as u32,
buffer.as_ptr(),
&mut pBmp as *mut *mut IWICBitmap
);
由于我已经放弃了使用的想法,IStream
并且CreateDecoderFromStream()
由于看似前所未有的功能允许我从IWICBitmapDecoder
.
我不肯定是否实现了这样的功能IWICBitmap
,但是将其转换为HGDIOBJECT
并按顺序使用 inSelectObject()
不会导致错误,但它不会产生图像。
是实例化新位图并复制像素数据和位图信息的唯一解决方案吗?
解决方案
推荐阅读
- react-native - 将 Azure SignalR 与 React Native 应用程序结合使用
- swift - Swift,如何调用我的 GameScene 扩展中的函数?
- c++ - Qt5、C++:未加载 QMYSQL 驱动程序
- firebase - 名称为 DEFAULT 的 Flutter Firebase 实时数据库 FirebaseApp 不存在。可用的应用名称:[默认]
- ansible - ansible 2.6.17 和 pbrun su - 用户
- python - procmail 和 python 脚本存在权限问题
- javascript - 节点打字稿:使用括号表示法时未定义 JSON
- batch-file - 使用批处理文件生成哈希,但是如何将 md5 保存到文件中?
- python - 规范化 Python 字典以适应数据库表结构
- typescript - Typescript 类数组类型,在每个项目的键之间具有相同的泛型类型