LEADTOOLS Support
Imaging
Imaging SDK Examples
HOW TO: Use LEADTOOLS MRC to save file segments
#1
Posted
:
Friday, October 13, 2017 2:24:31 PM(UTC)
Groups: Tech Support
Posts: 366
Thanks: 1 times
Was thanked: 4 time(s) in 4 post(s)
Attached is a Visual Studio 2010 project written in C++ to illustrate how to use LEADTOOLS MRC segmentation. This simplified demo uses
LEADTOOLS MRC segmentation to identify different areas of a bitmap to compress out as separate files. Typically with MRC files, all of this would be wrapped up in a TIFF or PDF file. This demo just explodes the typical output into many smaller files.
The main method of the application loops through each page in a file, starts the segmentation process, and then uses a callback to enumerate the different segments found:
Code: for(int i = 0; i < myData.nPagesCount; i++)
{
nRet = myData.bitmap.Load(0, ORDER_RGB, i, &(myData.fInfo));
if(nRet != SUCCESS)
goto cleanup;
// Start the segmentation process
nRet = segment.Start(&myData,i+1);
if(nRet == SUCCESS)
{
/* do the auto-segmentation*/
nRet = segment.FindSegments(&myData);
if(nRet == SUCCESS)
{
segment.EnableCallBack (TRUE);
nRet = segment.MrcEnumSegments (0);
segment.EnableCallBack(FALSE);
}
/* end the segmentation process */
nRet = segment.Stop();
if(nRet != SUCCESS)
goto cleanup;
}
else
goto cleanup;
}
The magic happens in the
MrcEnumSegmentsCallBack(). A lot of the code written for this was to generate a new file name each time, and then check the
pSegmentData->uType to see what type of segment was identified. Based on this, different raster compressions would be used to save out the individual segments.
Code: // Figure out the type of file to save
if(pSegmentData->uType == SEGTYPE_BACKGROUND)
{
fileFormat = FILE_TIFLZW;
}
else if(pSegmentData->uType == SEGTYPE_ONECOLOR)
{
bitsPerPixel = 1;
fileFormat = FILE_PNG;
szFileExtension = L_TEXT(".png");
}
else if(pSegmentData->uType == SEGTYPE_TEXT_1BIT_BW)
{
bitsPerPixel = 1;
fileFormat = FILE_JBIG2;
szFileExtension = L_TEXT(".jb2");
}
else if(pSegmentData->uType == SEGTYPE_TEXT_1BIT_COLOR)
{
bitsPerPixel = 1;
fileFormat = FILE_PNG;
szFileExtension = L_TEXT(".png");
}
else if(pSegmentData->uType == SEGTYPE_TEXT_2BITBW || pSegmentData->uType == SEGTYPE_TEXT_2BIT_COLOR || pSegmentData->uType == SEGTYPE_GRAYSCALE_2BIT)
{
bitsPerPixel = 2;
fileFormat = FILE_TIFLZW;
szFileExtension = L_TEXT(".tif");
}
else if(pSegmentData->uType == SEGTYPE_GRAYSCALE_8BIT)
{
bitsPerPixel = 8;
fileFormat = FILE_JPEG;
szFileExtension = L_TEXT(".jpg");
}
else if(pSegmentData->uType == SEGTYPE_PICTURE)
{
bitsPerPixel = 24;
fileFormat = FILE_JPEG;
szFileExtension = L_TEXT(".jpg");
}
...
// Save the segment to file
if(m_DemoData != NULL)
{
LBitmapBase tempBitmap;
tempBitmap.CopyRect(m_DemoData->bitmap, pSegmentData->rcBitmapSeg);
tempBitmap.Save(szOutputFileName, fileFormat, bitsPerPixel, QUALITY_FACTOR, SAVE_FLAGS);
}
The code targets the LEADTOOLS 19 VC10 binaries. To run this project, please do the following:
1.) Extract the project to the following directory:
C:\LEADTOOLS 19\Examples\posts\t12327\
2.) In Main.cpp, update Developer license and key on lines 18 & 19
3.) (Optional) In DemoData.cpp, update the input file on line 4 and output directory on line 11
Walter Bates
Senior Support Engineer
LEAD Technologies, Inc.
LEADTOOLS Support
Imaging
Imaging SDK Examples
HOW TO: Use LEADTOOLS MRC to save file segments
You cannot post new topics in this forum.
You cannot reply to topics in this forum.
You cannot delete your posts in this forum.
You cannot edit your posts in this forum.
You cannot create polls in this forum.
You cannot vote in polls in this forum.