如何使用LEADTOOLS 19将图像效果应用于内存缓冲区中的JPEG 我使用C++、LeaveToS19和VS2015制作一个Windows可执行文件,从服务器读取图像,使用LeaveToice对其应用图像效果,并在浏览器中显示。p>

如何使用LEADTOOLS 19将图像效果应用于内存缓冲区中的JPEG 我使用C++、LeaveToS19和VS2015制作一个Windows可执行文件,从服务器读取图像,使用LeaveToice对其应用图像效果,并在浏览器中显示。p>,c++,bitmap,leadtools-sdk,C++,Bitmap,Leadtools Sdk,服务器将图像作为一个字符数组提供给我,其中包含图像的JPEG编码(从“ÿØÿá”开始)和该缓冲区的长度。大多数LEADTOOLS函数都从文件中读取图像,但我不想为了将其作为位图读取而将其写入磁盘 我首先尝试的是StartFeedLoad函数: //pImageData is the buffer of JPEG data, and imageLength is the //server-provided size of pImageData in bytes LBuffer buf((L_V

服务器将图像作为一个字符数组提供给我,其中包含图像的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_参数:指定了一个或多个无效参数。我尝试了不同的bitsPerPixel值、颜色顺序,以及添加或不添加另一个NULL参数作为fileInfo,但仍然得到相同的错误


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

谢谢


编辑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

如果开始时整个文件都在内存中,那么应该使用LMemoryFile::GetInfo和LMemoryFile::LoadMemory。如果你不这样做,那么FeedLoad就是一条出路。这里有一个例子:


在Lead工具安装文件夹中可以找到一个完整的工作示例:C:\LeaveToes\\Stase\CaseLaby\MSVC\FoeFosie

< P> LeDeaveToAsvices支持的功能是正确的,但我仍然在考虑这个问题,因为我链接到了LeaveToC+C++类库的Unicode和ANSI版本(Ltwvc_x.lib和Ltwvc_ax.lib)。当我删除Unicode库(从我的ANSI项目中)时,一切正常。

Hey,我添加了对GetInfo的调用,但它返回-2041,表示没有加载LTFIL。我添加了一个检查(LBase::GetLoadedLibraries()<\u FIL==0)返回false;到它前面的行,它不返回false,表示LTFIL已加载。我是否正确检查了它?