LFile::ReadCommentOffset
#include "ltwrappr.h"
L_INT LFile::ReadCommentOffset(fd, nOffsetBegin, nBytesToLoad, uType, pComment, uLength, pLoadOptions)
|
L_INT fd; |
/* windows file handle of the file to load */ |
|
L_INT32 nOffsetBegin; |
/* position of the first byte to load */ |
|
L_INT32 nBytesToLoad; |
/* size of the embedded image file */ |
|
L_UINT uType; |
/* type of comment */ |
|
/* pointer to your buffer for the comment field */ | |
|
L_UINT uLength; |
/* size of your buffer for the comment field */ |
|
pLOADFILEOPTION pLoadOptions; |
/* pointer to optional extended load options */ |
Reads a comment from a file and lets you specify the location of the image data within the file. This enables you to read comments from an image file that is embedded in another file.
|
Parameter |
Description |
|
fd |
The Windows file handle of the file to load. |
|
nOffsetBegin |
The position, from the beginning of the file, of the first byte to load. |
|
nBytesToLoad |
The size of the embedded image file. (The embedded file may be a record within the larger file, and in such cases, this is the record size.) |
|
uType |
The type of comment. For a list of possible values, refer to Types of File Comments. |
|
pComment |
Pointer to the buffer that will hold the comment field, including the terminating NULL. Pass NULL to get only the length of the field (the return value). |
|
uLength |
The size of the buffer that will hold the comment field. |
|
pLoadOptions |
Pointer to optional extended load options. Pass NULL to use the default load options. |
Returns
|
SUCCESS |
The function was successful. |
|
< 1 |
An error occurred. Refer to Return Codes. |
Comments
Like the LFile::ReadComment function, this function lets you read comments that are already saved in a file header. The only difference between the LFile::ReadComment function and this function is that this function allows you to specify an offset for the image data. For more information refer to the LFileSettings::SetComment function.
The location of the image is specified as shown in the following simple illustration:

You must open the file and get a Windows file handle before calling this function. Redirected input (specified with LBaseFile::EnableRedirectIO) is disabled when this function is executing.
Some file formats can contain comments, and some cannot, and each file format has its own set of comment types. When you save a file, the comments, which LEADTOOLS maintains in a global array, are saved in the file. The index into the array (specified using a constant) determines the type of comment, as described in Types of File Comments.
Before saving a file, use the LFileSettings::SetComment function to specify the comments to be saved.
|
Note: |
More options are available in the LOADFILEOPTION structure. |
Required DLLs and Libraries
|
LTFIL For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application. |
See Also
|
Functions: |
LFile::ReadComment, LFile::SaveOffset, LFileSettings::SetComment, LMemoryFile::ReadComment |
|
Topics: |
|
|
|
|
|
|
Example
#define COMMENT TEXT("I am the artist!")
void ReadfilecommentoffsetExample()
{
/*
The following sample will create a file with an offset and will read a
comment from the file it just saved: */
LBitmap
Bitmap;
LFile
lf;
HFILE
OffsetFile; /* File handle */
L_INT32
SizeWritten; /* Variable to be updated with the size written */
L_INT
nRet = 0 ; /* Return value */
/*
Load an existing bitmap */
nRet
= Bitmap.Load(TEXT("C:\\Optimized.gif"),
0, ORDER_BGR);
if(nRet
!= SUCCESS)
{
MessageBox(TEXT("Load
has failed!"), TEXT("FAILURE"), MB_OK|MB_ICONERROR);
return;
}
lf.SetBitmap(&Bitmap)
;
lf.SetFileName(TEXT("C:\\Optimized.gif"))
;
#ifdef UNICODE
OffsetFile
= _wcreat(TEXT("TOFFSET.TST"), 0);
#else
OffsetFile
= _lcreat("TOFFSET.TST", 0);
#endif
/*
Write some text in the file -- 29 characters and a terminator */
nRet
= _lwrite(OffsetFile, TEXT("This is a 29-character string"),
30);
if
(nRet == HFILE_ERROR) return ;
/*
set and save a comment into a file with an offset */
nRet
= LFileSettings::SetComment(CMNT_SZARTIST,
(L_UCHAR L_FAR*)COMMENT, sizeof(COMMENT));
/*
Save the image file with an offset inside the TOFFSET.TST file */
nRet
= lf.SaveOffset(OffsetFile,
30, &SizeWritten, FILE_TIF);
/*
Close the file */
_lclose(OffsetFile);
/*
free the bitmap */
Bitmap.Free();
/*
Notify the user with a message box */
if
(nRet != SUCCESS)
{
MessageBox
(TEXT("Error saving file"), TEXT("Error"), MB_OK);
return;
}
/*****
Now load the file we just saved ****/
/*
Open the file and get the file handle */
#ifdef UNICODE
OffsetFile
= _wopen(TEXT("TOFFSET.TST"), OF_READ|OF_SHARE_DENY_WRITE );
#else
OffsetFile
= _lopen("TOFFSET.TST", OF_READ|OF_SHARE_DENY_WRITE );
#endif
/*
Get the comment size */
nRet
= lf.ReadCommentOffset( OffsetFile,
30, SizeWritten,
CMNT_SZARTIST,
NULL, 0, NULL);
if(nRet
> 0)
{
/*
Allocate a buffer for the comment. Allocate extra byte for string terminator
*/
L_UCHAR
L_FAR*pComment = (L_UCHAR L_FAR*)malloc(nRet + 1);
nRet
= lf.ReadCommentOffset(OffsetFile,
30, SizeWritten,
CMNT_SZARTIST,
pComment, nRet + 1, NULL);
if(nRet
> 0)
{
/*
make sure the string is NULL-terminated */
pComment[nRet]
= 0;
#ifdef UNICODE
/*
convert the string to UNICODE and display it */
#else
MessageBox((LPSTR)pComment,
TEXT("SUCCESS"), MB_OK);
#endif
}
free(pComment);
}
/*
Close the file */
_lclose(OffsetFile);
}