使用过滤数据加速加载大文件

一些文件格式变得相当缓慢加载或转换时,有很多的页面。这是因为到N你有时必须通过页1页,2,…N - 1前N页等格式,通常加载页面N N的增加变得越来越慢。

LEADTOOLS提供一个机制来加速装运或转换的文件。文件格式,可以处理这种方式包括以下格式:

使用这种机制,执行以下步骤:

  1. 被调用文件的过滤数据L_FileInfoFILEINFO_GETUSERDATA国旗。
  2. 通过过滤数据的加载或使用转换函数LOADFILEOPTION为每个页面结构。
  3. 免费使用过滤数据L_FreeFilterData

不使用过滤数据在多个线程,有以下原因:

例子:

/ *这个helper函数将一个文件保存在一个特定的文件夹* /静态L_INT SavePage (pBITMAPHANDLE pBitmap, L_INT nPageNumber, L_TCHAR * pszDir){L_TCHAR szPath [MAX_PATH];_stprintf_s (szPath _countof (szPath) _T (“% s % d.jpg”)、pszDir nPageNumber);返回L_SaveBitmap (szPath pBitmap FILE_JPEG_411 0, 20日,NULL);}/ *这个函数显示了如何使用加快过滤数据保存的文件有很多页* /L_INT ConvertFileWithManyPages (){#定义SRC_PDF_FILE _T (“c: \ \ temp \ \ FileWithManyPages.pdf”)BITMAPHANDLE位图= {0};FILEINFO FILEINFO = {0};LOADFILEOPTION LOADFILEOPTION;L_GetDefaultLoadFileOption (&LoadFileOption运算符(LoadFileOption));LoadFileOption。PageNumber = 1;/ *计算总页数和过滤数据* /L_INT nRet = L_FileInfo (SRC_PDF_FILE &fileInfo,运算符(FILEINFO) FILEINFO_TOTALPAGES | FILEINFO_USEFILTERDATA &LoadFileOption);如果(nRet = =成功){/ *过滤数据复制到LOADFILEOPTION结构加快负载。此外,过滤数据将被保存在LOADFILEOPTION自FILEINFO结构将被重写。* /如果(fileInfo.pFilterData){LoadFileOption。pFilterData = fileInfo.pFilterData;LoadFileOption。uFilterDataSize = fileInfo.uFilterDataSize;LoadFileOption。nFilter = fileInfo.nFilter;LoadFileOption。Flags2 | = ELO2_USEFILTERDATA;}(L_INT i = 1;我< = fileInfo.TotalPages;我+ +){/ * fileInfo结构只有第一页是完整的。对其他人来说,这只表示格式* /如果(> 1)fileInfo。旗帜= FILEINFO_FORMATVALID;LoadFileOption。PageNumber =我;nRet = L_LoadBitmap (SRC_PDF_FILE &Data.BitmapHandle,运算符(BITMAPHANDLE), 0 ORDER_BGRORGRAY &LoadFileOption, fileInfo);如果(nRet = =成功){nRet = SavePage(平差。BitmapHandle LoadFileOption。PageNumber, _T (“c: \ \ temp \ \ \ \ "));L_FreeBitmap(位图);}如果(nRet ! =成功)打破;}* / / *自由过滤数据L_FreeFilterData (LoadFileOption。nFilter LoadFileOption。pFilterData LoadFileOption。uFilterDataSize L_TRUE);}返回nRet;}

上面的例子使用过滤数据转换所有的页的PDF文件。PDF文件,改进速度将明显当大文件(1000页或更多)转换。其他文件格式,速度可以显著改善甚至用更少的页面(只有10页)。

文件的筛选数据取决于源文件的内容,因此使用过滤数据只有创建它的文件。同时,不要使用过滤后的数据文件内容改变。当文件内容改变,自由过滤数据和检索通过调用另一个副本L_FileInfo一次。

您可以使用过滤器数据加速任何功能LOADFILEOPTION结构:L_FileInfo,L_FileConvertL_LoadXXX(所有负载功能等)。对于函数的列表使用LOADFILEOPTION结构,请参考函数利用LOADFILEOPTION或SAVEFILEOPTION结构

TIFF / BigTIFF文件使用一个简单的机制(IFD,每个页面或文件偏移量)。关于使用IFD的更多信息,请参考大型TIFF / BigTIFF文件加载和保存

LEADTOOLS光栅成像C API的帮助
188金宝搏的网址客服|支持|联系我们|知识产权的通知
©1991 - 2021领先的技术公司。保留所有权利。