C++、LEADTOOLS19、およびVS2015を使用してWindows実行ファイルを作成し、サーバーから画像を読み込み、LEADTOOLSを使用して画像エフェクトを適用するそれをブラウザに表示する。LEADTOOLSを使用してメモリバッファ内のJPEGに画像エフェクトを適用する方法
サーバは画像のJPEGエンコーディング( "ÿØÿà"で始まる)とこのバッファの長さを含む文字配列として私に画像を提供します。ほとんどのLEADTOOLS関数はファイルからイメージを読み込みますが、ビットマップとして読み込むためにディスクに書き込む必要はありません。
私が試した最初のものは、StartFeedLoadの関数であった:
//pImageData is the buffer of JPEG data, and imageLength is the
//server-provided size of pImageData in bytes
LBuffer buf((L_VOID *)pImageData, imageLength);
LFile imgFile;
LBitmap bitmap;
imgFile.SetBitmap(&imgbitmap);
// Initialize the file-load process
imgmemfile.StartFeedLoad(8, 0,
LOADFILE_ALLOCATE | LOADFILE_STORE, NULL);
imgmemfile.FeedLoad(&buf);
imgmemfile.StopFeedLoad();
このコードでStartFeedLoadを実行しようとしたとき、私はこの例外を取得:
Exception thrown at 0x000007F855BC2662 (ltwvcax.dll) in getimage.exe:
0xC0000005: Access violation reading location 0x0000000000000148.
私は別のいくつかを試してみましたStartFeedLoadを呼び出す前に、私はそれを渡していたパラメータを変更しようとしましたが、毎回その例外がありました。それが機能していないと
、私が試した次の方法がLEADTOOLSライブラリLMemoryFileクラスを使用して、メモリ内のファイルとしてバッファを保存することでした:
LBuffer buf((L_VOID *)pImageData, imageLength);
LMemoryFile imgmemfile;
BITMAPHANDLE pbit;
//The bitmap the image will be loaded into
LBitmap bitmap;
imgmemfile.SetBitmap(&bitmap);
//Load the buffer to the image
ret = imgmemfile.LoadMemory(buf, 0, ORDER_RGBORGRAY, LOADFILE_ALLOCATE | LOADFILE_STORE, NULL);
この時点で、LoadMemoryはWRPERR_INVALID_PARAMETERSを返します。 1つ以上の無効なパラメーターが指定されました。私は別のbitsPerPixel値、カラーオーダーを試しましたが、fileInfoとして別のNULLパラメータを追加してもしなくても、同じエラーが表示されます。
私は「準備」に他の何かロードするビットマップを行う必要があるような気がしますが、私はそれが大きさや、それを初期化するために何か他のものだかわかりません。
ありがとうございます!
EDIT 5/9/16:
//Load image
LBuffer buf((L_VOID *)pImageData, imageLength);
//LFile imgmemfile;
FILEINFO fileInfo = FILEINFO();
LMemoryFile imgmemfile;
BITMAPHANDLE pbit;
if (LBase::GetLoadedLibraries() & LT_FIL == 0)
return false;
LBitmap bitmap;
imgmemfile.SetBitmap(&bitmap);
ret = imgmemfile.GetInfo(buf, &fileInfo, sizeof(FILEINFO), 0, NULL);
ret = imgmemfile.LoadMemory(buf, 0, ORDER_RGBORGRAY, LOADFILE_ALLOCATE | LOADFILE_STORE, NULL, &fileInfo);
ret = imgmemfile.Save(&buf, FILE_JPEG, 8, 30, NULL);
コードは、追加のライブラリのチェックを過ぎて取得しますが、GetInfoは、そのLTFILのISNを示す、-2041返し」:LEADTOOLSによって示されるように、 "GetInfoは" を追加しましたロードされます。
ちょっと、GetInfoの呼び出しを追加しましたが、LTFILがロードされていないことを示す-2041を返します。(LBase :: GetLoadedLibraries()&LT_FIL == 0) \tの場合 \t \t falseを返します。 をその前の行に追加し、LTFILがロードされていることを示すfalseを返しません。私はそれを正しくチェックしていますか? –