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」のオブジェクトは許可されていません。
EDIT2:
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 オブジェクト ポインターを適切に初期化するにはどうすればよいですか?