LMemoryFile::ReadTag
#include "ltwrappr.h"
virtual L_INT32 LMemoryFile::ReadTag(LMemoryBuffer, pLTagDataBuffer, uTag, pType, pCount, pLoadFileOption=NULL)
LBuffer& LMemoryBuffer; |
/* an LBuffer object */ |
/* pointer to an LBuffer object */ | |
L_UINT16 uTag; |
/* tag to identify the data in the TIFF file */ |
/* address of the variable to be updated with the data type */ | |
/* address of the variable to be updated with the count */ | |
pLOADFILEOPTION pLoadFileOption; |
/* pointer to optional extended load options */ |
Gets the specified tagged data from a TIFF file in memory. This function is provided to support TIFF tags that you define.
Parameter |
Description |
LMemoryBuffer |
A LEAD LBuffer object that contains the file in memory. |
pLTagDataBuffer |
Pointer to the buffer to be updated with the data. You can pass NULL if you want to use this function's return value to determine the required buffer size. |
uTag |
Tag to identify the data in the TIFF file. Use the same tag that you specified in the LFileSettings::SetTag function. |
pType |
Address of the variable to be updated with the tagged data type. Possible values are: |
Value |
Meaning |
TAG_BYTE |
[1] Byte. |
TAG_ASCII |
[2] Byte in the range of 0 to 255. |
TAG_SBYTE |
[6] Byte used as signed number in the range of -128 to +127. |
TAG_UNDEFINED |
[7] Byte, with application-defined usage. |
TAG_SHORT |
[3] Two bytes, unsigned. |
TAG_SSHORT |
[8] Two bytes, signed. |
TAG_LONG |
[4] Four bytes, unsigned. |
TAG_SLONG |
[9] Four bytes, signed. |
TAG_RATIONAL |
[5] Eight bytes, used as a pair of unsigned long integers, where the first number is the numerator and the second is the denominator of a fraction. |
TAG_SRATIONAL |
[10] Eight bytes, used as a pair of signed long integers, where the first number is the numerator and the second is the denominator of a fraction. |
TAG_FLOAT |
[11] Four bytes used as a floating point number. |
TAG_DOUBLE |
[12] Eight bytes used as a double-precision floating point number. |
pCount |
Address of the variable to be updated with the count of data items. The count is based on the tagged data type. For example, if the count is 2 and the data type is TAG_DOUBLE, the required buffer size is 16. |
pLoadFileOption |
Pointer to optional extended load options. Pass NULL to use the default load options. |
Returns
>= 0 |
Length of the tagged data, in bytes. |
< 0 |
An error occurred. Refer to Return Codes. |
Comments
It is often convenient to call this function twice, as follows:
1. |
Call the function the first time, specifying NULL in the pLTagDataBuffer parameter, and using the return value to determine the required size of the buffer. |
2. |
Allocate the buffer. |
3. |
Call the function the second time, passing a pointer to your buffer in the pLTagDataBuffer parameter. |
For general information about TIFF tags, refer to Implementing TIFF Comments and Tags.
The LMemoryBuffer parameter is passed by reference, and is a required parameter.
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: |
|
Topics: |
Example
L_VOID TestReadTagMem()
{
LMemoryFile LeadMemFile ;
LBuffer LeadMemBuffer ;
LBuffer LeadCommBuffer ;
LFile LeadFile ;
LBitmapBase LeadBitmap;
L_UINT16 LogoPosition = 0x8001; // my private tags
L_UINT16 TagType = TAG_SSHORT; // tagged data type
L_UINT32 TagCount = 4; // count of data items
L_INT32 BufferSize ;
L_INT TagData[] = {5, 5, 24, 37,};
L_VOID L_FAR *pTagData = &TagData; // pointer to
the buffer containing tagged data
LeadFile.SetBitmap(&LeadBitmap)
;
LeadFile.SetFileName(TEXT("1.tif"))
;
LeadFile.LoadBitmap()
;
// Set the tag data to be saved
LFileSettings::SetTag(LogoPosition, TagType, TagCount,
pTagData);
LeadMemFile.SetBitmap(&LeadBitmap)
;
LeadMemFile.SaveBitmap(&LeadMemBuffer,FILE_LEAD,24,QS)
;
// Get the required size of the buffer for the tagged
data
BufferSize = LeadMemFile.ReadTag(LeadMemBuffer,
NULL, LogoPosition,
&TagType, &TagCount, NULL);
if ((TagType != TAG_SSHORT) || (BufferSize < 0))
return ;
else
// Allocate the buffer
LeadCommBuffer.Reallocate(BufferSize);
// Get the tagged data
BufferSize = LeadMemFile.ReadTag(LeadMemBuffer,
&LeadCommBuffer, LogoPosition,
&TagType, &TagCount);
if (BufferSize >= 0)
MessageBox(NULL, TEXT("ReadTag successful"),
TEXT("TAG Memory"),MB_OK) ;
}