L_OptOptimizeDir

#include "l_bitmap.h"

L_INT EXT_FUNCTION L_OptOptimizeDir(pszOrgDirPath, pszOptDirPath, pOptImgOptions, pszFilesExt, bIncludeSubDirs, pfnOptImgDirCB, pUserData)

L_TCHAR L_FAR * pszOrgDirPath;

/* full path directory to optimize */

L_TCHAR L_FAR * pszOptDirPath;

/* full path directory to save optimized images */

pOPTIMIZEIMAGEOPTIONS pOptImgOptions;

/* pointer to the OPTIMIZEIMAGEOPTIONS structure */

L_TCHAR L_FAR * pszFilesExt;

/* files extension(s) to optimize */

L_BOOL bIncludeSubDirs;

/* flag that indicates whether to include sub-directories */

OPTIMIZEIMAGEDIRCALLBACK pfnOptImgDirCB;

/* optional callback function */

L_VOID L_FAR * pUserData;

/* pointer to more parameters for the callback */

Optimizes a directory of images using the specified optimization options, and saves the optimized images to a new directory with the same hierarchy.

Parameter

Description

pszOrgDirPath

Character string that contains full path directory of supported images to optimize.

pszOptDirPath

Character string that contains full path directory to save the optimized image(s).

pOptImgOptions

Pointer to an OPTIMIZEIMAGEOPTIONS structure that contains the options used in optimization. Pass NULL to use the default optimization options.

pszFilesExt

Pointer to a character string that contains the extensions of the files to optimize. This is a NULL terminated string and can have a maximum length of MAX_PATH. For example:

image\sqrblit.gif To optimize all "gif" and "jpeg" files, pszFilesExt should be set to "*.gif;*.jpeg".

image\sqrblit.gif To optimize all the supported files found in the pszOrgDirPath directory, regardless of the their extensions, pszFilesExt should be set to "*.*".

bIncludeSubDirs

Flag that indicates whether to include sub-directories when optimizing. Possible values are:

 

Value

Meaning

 

TRUE

Include sub-directories when optimizing.

 

FALSE

Exclude sub-directories when optimizing.

pfnOptImgDirCB

Optional callback function for additional processing.

image\sqrblit.gif If you do not provide a callback function, use NULL as the value of this parameter.

image\sqrblit.gif If you do provide a callback function, use the function pointer as the value of this parameter.

The callback function must adhere to the function prototype described in OPTIMIZEIMAGEDIRCALLBACK Function.

pUserData

Void pointer that you can use to pass one or more additional parameters that the callback function needs.

To use this feature, assign a value to a variable or create a structure that contains as many fields as you need. Then, in this parameter, pass the address of the variable or structure, casting it to L_VOID L_FAR *. The callback function, which receives the address in its own pUserData parameter, can cast it to a pointer of the appropriate data type to access your variable or structure.

If the additional parameters are not needed, you can pass NULL in this parameter.

Returns

SUCCESS

The function was successful.

< 1

An error occurred. Refer to Return Codes.

Comments

This function looks for all the selected and supported files in the pszOrgDirPath directory and optimizes them using the optimization options passed in the pOptImgOptions parameter. It then saves the optimized images to the pszOptDirPath directory.

Both the pszOrgDirPath and pszOptDirPath parameters should contain a full path, complete with drive name. The pszOrgDirPath parameter should contain the full path to the input (original) directory, and the pszOptDirPath parameter should contain the full path to the output (optimized) directory.

Required DLLs and Libraries

LTIMGOPT

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

Windows 95 / 98 / Me, Windows 2000 / XP.

See Also

Functions:

L_OptGetDefaultOptions, L_OptOptimizeBuffer.

Topics:

Optimizer: Optimization Functions

 

Image Optimization

Example

/* This Example is going to optimizes all files with extensions jpg, bmp and tmp */
L_INT L_FAR L_EXPORT fnOptDirCB(pOPTIMIZEIMAGEDIRINFO pImgDirInfo, L_VOID L_FAR * pUserData)
{
   // Check if pCBData is a vlid pointer
   if(pImgDirInfo)
   {
      L_TCHAR buf[200]; // Message buffer

      switch(pImgDirInfo->nStatusCode)
      {
         case SUCCESS: /* Optimizing operation Successfully done */
         {
            MessageBox(NULL, TEXT("Operation Successfully Done"), TEXT("Optimizing"), MB_OK);
         }
         break;

         case OPTIMIZE_DIR_PRE_OPTIMIZINGIMAGE: /* Pre Optimizing Image */
         {
            MessageBox(NULL, TEXT("Pre Optimize Image"), TEXT("Note"), MB_OK);
            if((pImgDirInfo->pFileInfo->Format == FILE_JPEG) ||
               (pImgDirInfo->pFileInfo->Format == FILE_JPEG_411) ||
               (pImgDirInfo->pFileInfo->Format == FILE_JPEG_422) ||
               (pImgDirInfo->pFileInfo->Format == FILE_EXIF_JPEG_411) ||
               (pImgDirInfo->pFileInfo->Format == FILE_EXIF_JPEG_422))
            pImgDirInfo->pOptImgOptions->JPEGColorSpace = JPEG_COLORSPACE_422;
         }
         break;
         case OPTIMIZE_DIR_OPTIMIZINGIMAGE: /* Optimizing ... */
         {
            static i = 1;     // Optimized files counter

            // display the current file and total percent
            wsprintf(buf, TEXT("%d %% of optimizing %s to %s \nFiles %d of %d"), pImgDirInfo->nFilePercent, pImgDirInfo->szOrgFileName, pImgDirInfo->szOptFileName, i, pImgDirInfo->nTotalFolderFilesCount);
            MessageBox(NULL, buf, TEXT("Optimizing"), MB_OK);

            // if nFilePercent = 100 increment the counter by 1
            if((pImgDirInfo->nFilePercent == 100) && ((i + 1) <= pImgDirInfo->nTotalFolderFilesCount))
               i++;
         }
         break;

         default:
         {
            /* report error to user */
            /* Give the user the ability to skip the current image only or cancel the whole operation*/
            wsprintf(buf, TEXT("Error: %d - Optimizing Image!\n%s\nPress OK to skip this file and optimize the next one!"), pImgDirInfo->nStatusCode, pImgDirInfo->szOrgFileName);
            if(MessageBox(NULL, buf, TEXT("Error"), MB_OKCANCEL|MB_ICONERROR) == IDOK)
               return(ERROR_OPT_SKIPIMAGE);
            else
               return(ERROR_OPT_ABORT);
         }
         break;
      }
   }
   return SUCCESS;
}

L_INT OptDirFunction(pOPTIMIZEIMAGEOPTIONS pOptImgOptions, L_BOOL bIncludeSubDir, L_VOID L_FAR * pUserData)
{
   return L_OptOptimizeDir(TEXT("C:\\OriginalImages"), /* The original Dir to be optimized. */
                           TEXT("D:\\OptimizedImages"),/* The New Dir to save the Optimized image(s) to.*/
                           pOptImgOptions,             /* Optimization options.*/
                           TEXT("*.jpg;*.bmp;*.tmp"),  /* optimize all images with ext jpg, bmp and tmp only.*/
                           bIncludeSubDir,             /* Optimize or not the sub-dirs.*/
                           fnOptDirCB,                 /* Callback */
                           pUserData);                 /* User data */
}