2

C++、LEADTOOLS19、および VS2015 を使用して Windows 実行可能ファイルを作成し、サーバーから画像を読み取り、LEADTOOLS を使用してそれに画像効果を適用し、ブラウザに表示します。

サーバーは、画像の 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 パラメータを追加するかどうかを試しましたが、それでも同じエラーが発生します。


ロードするビットマップを「準備」するために何か他のことをする必要があるように感じますが、それを初期化するためのサイズやその他のことはわかりません。

ありがとう!


2016 年 5 月 9 日編集: Leadtools が示すように「GetInfo」を追加:

//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 は -2041 を返し、LTFIL が読み込まれていないことを示します。

4

2 に答える 2

0

LEADTOOLS サポートが提供してくれた機能は正しかったのですが、Leadtools C++ クラス ライブラリ (Ltwvc_x.lib と Ltwvc_ax.lib) の Unicode バージョンと ANSI バージョンの両方にリンクしていたため、まだ問題を抱えていました。(ANSI プロジェクトから) Unicode ライブラリを削除すると、すべて正常に動作しました。

于 2016-05-11T17:02:01.310 に答える