L_ResizeBitmap

#include "l_bitmap.h"

L_LTKRN_API L_INT L_ResizeBitmap(pBitmapSrc, pDestBitmap, uFlags)

pBITMAPHANDLE pBitmapSrc;

/* pointer to the source bitmap handle */

pBITMAPHANDLE pDestBitmap;

/* pointer to the destination bitmap handle */

L_UINT uFlags;

/* flags that determine resizing options */

Resizes the image from an existing bitmap, and puts the resized image into a destination bitmap, leaving the original bitmap intact.

Parameter

Description

pBitmapSrc

Pointer to the bitmap handle referencing the source bitmap.

pDestBitmap

Pointer to the bitmap handle referencing the destination bitmap to contain the new resized image.

uFlags

Flags that determine resizing options. Possible values are:

 

Value

Meaning

 

SIZE_NORMAL

[0x0000] Resize normally.

 

SIZE_FAVORBLACK

[0x0001] (Document and Medical Imaging toolkits) Preserve black objects when making the image smaller. This option affects only 1-bit, black-and-white images, where it prevents the disappearance of thin lines. You can use a bitwise OR ( | ) to combine this flag with another one. For example, SIZE_RESAMPLE | SIZE_FAVORBLACK causes color images to be resampled, but applies the favor-black option to 1-bit, black-and-white images.

 

SIZE_RESAMPLE

[0x0002] Use linear interpolation and averaging to produce a higher-quality image.

 

SIZE_BICUBIC

[0x0004] Use bicubic interpolation and averaging to produce a higher quality image. This is slower than SIZE_RESAMPLE.

Returns

SUCCESS

The function was successful.

< 1

An error occurred. Refer to Return Codes.

Comments

You are responsible for allocating enough storage for the destination bitmap. If only one copy is desired, use the L_SizeBitmap function instead of this one.

If you are working with an 8-bit or less image, before calling this function, you must ensure that both bitmap handles refer to the same palette. To do so, you can use the L_CopyBitmapPalette function to duplicate the palette as follows:

L_CopyBitmapPalette(&DestinationBitmap, &SourceBitmap.hPalette);

To update a status bar or detect a user interrupt during execution of this function, refer to L_SetStatusCallback.

Required DLLs and Libraries

LTKRN

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application.

Platforms

Win32, x64, Mobile.

See Also

Functions:

L_SizeBitmap, L_StartResize, L_Resize, L_StopResize, L_DlgResize, L_ApplyTransformationParameters, L_GetMarksCenterMassBitmap, L_GetTransformationParameters, L_IsRegMarkBitmap, L_SearchRegMarksBitmap, L_SizeBitmapInterpolate

Topics:

Raster Image Functions: Doing Geometric Transformations

 

Resizing Considerations

 

Raster Image Functions: Document Imaging

 

Detecting Registration Marks

Example

For complete sample code, refer to the FEATURE1 example. This example loads a temporary bitmap, and uses L_ResizeBitmap to create a new bitmap half the size of the original. The example also demonstrates low-level functions for initializing and allocating a bitmap. The same tasks can be done more efficiently with high-level functions. Note that the result is not very good because we resize a dithered image.

 L_INT ResizeBitmapExample (L_VOID)
{
   L_INT nRet;
   BITMAPHANDLE   LeadBitmap;          /* Bitmap handle for the final image */
   BITMAPHANDLE   TmpBitmap;           /* Bitmap handle for the initial image */
   L_INT          NewWidth, NewHeight; /* Resize dimensions */

   /* Load the temporary bitmap at 8 bits per pixel so that we can demonstrate
   how to handle its palette. */
   nRet = L_LoadBitmap (MAKE_IMAGE_PATH(TEXT("ImageProcessingDemo\\Image3.cmp")), &TmpBitmap, sizeof(BITMAPHANDLE), 8, ORDER_BGR, NULL, NULL);
   if(nRet != SUCCESS)
      return nRet;
   /* Define the dimensions for resizing */
   NewWidth = TmpBitmap.Width / 2;
   NewHeight = TmpBitmap.Height / 2;
   /* Initialize the new bitmap handle. */
   nRet = L_InitBitmap( &LeadBitmap, sizeof(BITMAPHANDLE), NewWidth, NewHeight, TmpBitmap.BitsPerPixel );
   if(nRet != SUCCESS)
      return nRet;
   /* Allocate the storage to hold the image data. */
   nRet = L_AllocateBitmap( &LeadBitmap, TYPE_CONV );
   if(nRet != SUCCESS)
      return nRet;
   /* Duplicate the palette */
   nRet = L_CopyBitmapPalette(&LeadBitmap, &TmpBitmap);
   if(nRet != SUCCESS)
      return nRet;
   /* Set other useful values in the bitmap handle */
   LeadBitmap.ViewPerspective = TmpBitmap.ViewPerspective;
   LeadBitmap.XResolution = TmpBitmap.XResolution;
   LeadBitmap.YResolution = TmpBitmap.YResolution;
   LeadBitmap.Order = TmpBitmap.Order;
   /* Resize TmpBitmap to create LeadBitmap */
   nRet = L_SaveBitmap(MAKE_IMAGE_PATH(TEXT("Result.BMP")), &LeadBitmap, FILE_BMP, 0, 0, NULL);
   if(nRet != SUCCESS)
      return nRet;
   nRet = L_ResizeBitmap (&TmpBitmap, &LeadBitmap, SIZE_NORMAL);
   if(nRet != SUCCESS)
      return nRet;
   /* Free the temporary bitmap */
   L_FreeBitmap(&TmpBitmap);
   /* Free the resized bitmap */
   L_FreeBitmap(&LeadBitmap);
   return SUCCESS;
}