我正在尝试将 HBITMAP 转换为 IWICBitmap,但遇到了很多麻烦。我找到了这个功能:
CreateBitmapFromHBITMAP();
但我无法让它工作。这是我使用它的方式:
void camera_avtcam_ex_t::GrabAsyncFrame(ULONG frameId, IWICImagingFactory* pWicFactory, IWICBitmap** outputBitmap, bool* pAbort )
{
QueueCamFrame();
HBITMAP transferbitmap;
GetFeatureAndRunAcquisitionStart(transferbitmap); //returns transferbitmap
//as a valid HBITMAP
//This HBITMAP works, I can save it to a file and/or print
//it to the screen and the image is displayed properly
pWicFactory->CreateBitmapFromHBITMAP(transferbitmap, NULL, WICBitmapUseAlpha, outputBitmap);
}
在函数中执行最后一行代码会导致访问冲突错误。
在调用这个GrabAsyncFrame()
函数之前,我创建了它需要的参数,如下所示:
ULONG frameId = 0;
IWICImagingFactory* pWicFactory = NULL;
IWICBitmap** outputBitmap = new IWICBitmap*;
bool* pAbort = NULL;
theCamera.GrabAsyncFrame(frameId, pWicFactory, outputBitmap, pAbort);
我有点怀疑将 pWicFactory 设置为 NULL,然后很快就使用它。但我想不出任何其他方法来初始化 IWICImagingFactory 对象。
所以我的问题是: 下面发布了新问题。
编辑:如果我尝试使用new
初始化 pWicFactory,我会收到一条消息说
错误:不允许抽象类类型“IWICImagingFactory”的对象。
编辑2:
在确认将 pWicFactory 设置为 NULL 是问题后,我现在需要知道如何正确初始化 IWICImagingFactory 对象指针。这就是我现在正在使用的:
ULONG frameId = 0;
IWICImagingFactory* pWicFactory = NULL;
/*new code*/CoCreateInstance(CLSID_WICImagingFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pWicFactory));
IWICBitmap** outputBitmap = new IWICBitmap*;
bool* pAbort = NULL;
theCamera.GrabAsyncFrame(frameId, pWicFactory, outputBitmap, pAbort);
问题: 如何正确初始化 IWICImagingFactory 对象指针?