我正在使用C++,LEADTOOLS19和VS2015使Windows可执行文件以从服务器读取图像,使用LEADTOOLS将图像效果应用到该图像,然后在浏览器中显示该图像。

服务器为我提供了一个字符数组,其中包含图像的JPEG编码(以“withØÿà”开头)和该缓冲区的长度。大多数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:指定了一个或多个无效参数。我尝试了不同的bitsPerPixel值,颜色顺序以及是否添加了另一个NULL参数作为fileInfo,但仍然遇到相同的错误。

我觉得我需要做一些其他事情来“准备”要加载的位图,但是我不知道它的大小或初始化它的其他方法。

谢谢!

编辑5/9/16:如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。

最佳答案

如果开始时整个文件都在内存中,则应使用LMemoryFile::GetInfo和LMemoryFile::LoadMemory。如果您不这样做,那么FeedLoad是必经之路。这里有一个示例:https://www.leadtools.com/help/leadtools/v19/main/clib/lfile__startfeedload.html

您可以在LEADTOOLS安装文件夹中找到完整的可用示例:C:\ LEADTOOLS 19 \ Examples \ ClassLibrary \ MSVC \ FeedLoad

10-07 18:10