从上周五研究-混合光栅内容(MRC)技术,到现在有几天了,重要内容,记下来,供以后参考。
MRC使用一种技术将图像划分为图像和文本,然后使用一种适合于此类型图像的压缩技术来获取最高的压缩率以及最佳的图像质量。
大白话:
以前,压缩图片,一张图片用同样一种压缩算法。
现在,压缩图片,先通过一种技术,把图像分成多个图像和文本,对不同的区块,采用不同的压缩算法。
支持MRC的产品有
1. LeadTools
2. CVISION . 此项技术已经被foxit收购
3. Vinta
4. OmniPage SDK
5. Xerox
6. Abbyy
7. Adlib
8 . LuraTech 已经被foxit收购100%
我们期望实现一张图片数据,可以通过MRC算法,获取其图片集和组织形式。
运行LeadTools的MRC Segmentation 32-bit, 自动划分区块显示如下【也可以手动调整】,再保存数据,即可实现压缩。
.\LeadTools\Shortcuts\File Formats\C++ Class Library\Mixed Raster Content\MRC Segmentation 32-bit
跟踪代码 发现MrcEnumSegments方法是封死的,不知内部如何实现,
//得到压缩区块数量
m_Segment.m_nSegmentsCount = m_Segment.MrcEnumSegments(0);
//得到待压缩数据
m_Segment.m_pSegmentData = (SEGMENTDATACHILD*)GlobalAllocPtr(GHND,sizeof(SEGMENTDATACHILD)*(m_Segment.m_nSegmentsCount));
以下为数据结构-->
class SEGMENTDATACHILD
{
public:
SEGMENTDATA m_Data;
L_BOOL m_bSelected;
L_BOOL m_bMoving;
...
};
typedef struct _SEGMENTDATA
{
L_UINT uStructSize;
RECT rcBitmapSeg;
L_UINT uType;
}
mrc压缩图片过程https://www.leadtools.com/help/leadtools/v19m/mrc/clib/exampleandsummary.html
1。
通过调用LSegment :: MrcStartBitmapSegmentation启动分段过程。
2。
通过调用LSegment :: MrcSegmentBitmap来分割页面。
3。
通过调用LSegment :: MrcSetSegmentData和LSegment :: MrcEnumSegments来更改段的一些属性。
4。
通过调用LSegment :: MrcDeleteSegment和LSegment :: MrcEnumSegments删除一些段。
5。
通过调用LSegment :: MrcCombineSegments和LSegment :: MrcEnumSegments组合片段。
6。
通过调用LSegment :: MrcCopySegmentationHandle将分割句柄和数据复制到另一个句柄。
7。
调用LSegment :: MrcSaveSegmentation将结果段保存到文件。要将已保存的文件段加载到文件中,请调用LSegment :: MrcLoadSegmentation。
8。
调用LSegment :: MrcSaveBitmapT44将页面保存为标准T44文件或调用LSegment :: MrcSaveBitmap以使用LEAD专有T44格式保存页面。
9。
调用LSegment :: MrcSaveBitmapList以使用标准T44格式,LEAD专有T44格式或PDF格式保存多页文件。
10。
通过调用LSegment :: MrcStopBitmapSegmentation来结束分段过程。
开发应用程序需要的库https://www.leadtools.com/help/leadtools/v19m/mrc/clib/14files.html