2016-05-02 13 views
2

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は" を追加しましたロードされます。

答えて

0

にLEADTOOLSのサポートは私が正しかった与えた関数は、しかし、私はLeadtools C++クラスライブラリ(Ltwvc_x.libとLtwvc_ax.lib)のUnicode版とANSI版の両方にリンクしていたので、まだ問題は解決していました。私がANSIプロジェクトのUnicodeライブラリを削除したところ、すべて正常に動作しました。

1

ファイル全体がメモリの先頭にある場合は、LMemoryFile :: GetInfoとLMemoryFile :: LoadMemoryを使用する必要があります。あなたがしなければ、FeedLoadは行く方法です。例はここにあります:https://www.leadtools.com/help/leadtools/v19/main/clib/lfile__startfeedload.html

あなたがLEADTOOLSのインストールフォルダに完全な作業例を見つけることができます:C:\ LEADTOOLS 19基の\例としてはClassLibrary \ MSVC \ FeedLoad \

+0

ちょっと、GetInfoの呼び出しを追加しましたが、LTFILがロードされていないことを示す-2041を返します。(LBase :: GetLoadedLibraries()&LT_FIL == 0) \tの場合 \t \t falseを返します。 をその前の行に追加し、LTFILがロードされていることを示すfalseを返しません。私はそれを正しくチェックしていますか? –

関連する問題