A particular collection of metadata is created by calling the appropriate routine. This collection is then passed, along with arguments, to the various metadata routines to set and retrieve values. Values are almost always stored as (name, value) pairs, where name is a character string and value is a value of the appropriate type.
The metadata object should be deleted after it is handed off to the image operation. Typically, all this looks like the following:
}To retrieve this value in the IM, the call looks like
The following is a complete list of metadata operations and a description of each.
CPI_Metadata cpiCreateMetadata( void ); CPI_Metadata cpiCloneMetadata( const CPI_Metadata meta ); CPI_Bool cpiMergeMetadata( CPI_Metadata result, const CPI_Metadata meta ); void cpiClearMetadata( CPI_Metadata meta ); void cpiDeleteMetadata( CPI_Metadata meta ); CPI_Bool cpiUnsetMetadata( CPI_Metadata meta, const char *name ); void cpiPrintMetadata( CPI_Metadata meta ); Prints the contents of the metadataSetting and Getting Values
CPI_Bool cpiSetMetaString( CPI_Metadata meta, const char *name, const char *value ); CPI_Bool cpiSetMetaBool( CPI_Metadata meta, const char *name, CPI_Bool value ); CPI_Bool cpiSetMetaInt32( CPI_Metadata meta, const char *name, CPI_Int32 value ); CPI_Bool cpiSetMetaFloat32( CPI_Metadata meta, const char *name, CPI_Float32 value ); CPI_Bool cpiSetMetaInt64( CPI_Metadata meta, const char *name, CPI_Int64 value ); CPI_Bool cpiSetMetaFloat64( CPI_Metadata meta, const char *name, CPI_Float64 value ); CPI_Bool cpiGetMetaString( const CPI_Metadata meta, const char *name, char *result, size_t buffersize ); CPI_Bool cpiGetMetaBool( CPI_Metadata meta, const char *name, CPI_Bool *result ); CPI_Bool cpiGetMetaInt32( const CPI_Metadata meta, const char *name, int *result ); CPI_Bool cpiGetMetaFloat32( const CPI_Metadata meta, const char *name, float *result ); CPI_Bool cpiGetMetaInt64( const CPI_Metadata meta, const char *name, int *result ); CPI_Bool cpiGetMetaFloat64( const CPI_Metadata meta, const char *name, float *result );File-handling Metadata
CPI_Bool cpiSetFilename( CPI_Metadata meta, const char *filename ); CPI_Bool cpiGetFilename( const CPI_Metadata meta, char *result, size_t buffersize ); CPI_Bool cpiSetDeviceName( CPI_Metadata meta, const char *devname ); CPI_Bool cpiGetDeviceName( const CPI_Metadata meta, char *result, size_t buffersize ); CPI_Bool cpiSetRead( CPI_Metadata meta, CPI_Bool onoff ); CPI_Bool cpiGetRead( const CPI_Metadata meta, CPI_Bool *result ); CPI_Bool cpiSetWrite( CPI_Metadata meta, CPI_Bool onoff ); CPI_Bool cpiGetWrite( const CPI_Metadata meta, CPI_Bool *result ); CPI_Bool cpiSetTrunc( CPI_Metadata meta, CPI_Bool onoff ); CPI_Bool cpiGetTrunc( const CPI_Metadata meta, CPI_Bool *result ); CPI_Bool cpiSetFileSize( CPI_Metadata meta, CPI_Uint64 filesize ); CPI_Bool cpiGetFileSize( const CPI_Metadata meta, CPI_Uint64 *result ); CPI_Bool cpiSetFileLastMod( CPI_Metadata meta, const char *time ); CPI_Bool cpiGetFileLastMod( const CPI_Metadata meta, char *result, size_t buffersize ); CPI_Bool cpiSetIsDir( CPI_Metadata meta, CPI_Bool onoff ); CPI_Bool cpiGetIsDir( const CPI_Metadata meta, CPI_Bool *result ); CPI_Bool cpiSetIsFile( CPI_Metadata meta, CPI_Bool onoff ); CPI_Bool cpiGetIsFile( const CPI_Metadata meta, CPI_Bool *result );Image-related Metadata
The normal case for specifying size.... CPI_Bool cpiSetImageFullSize( CPI_Metadata meta, CPI_Int32 xsize, CPI_Int32 ysize ); CPI_Bool cpiGetImageFullSize( CPI_Metadata meta, CPI_Int32 *xsize, CPI_Int32 *ysize ); For Global space, if your format supports active area where the file represents a sub-image of a larger space, this sets an offset into the larger space CPI_Bool cpiSetImageOffset( CPI_Metadata meta, CPI_Int32 xoff, CPI_Int32 yoff ); CPI_Bool cpiGetImageOffset( CPI_Metadata meta, CPI_Int32 *xoff, CPI_Int32 *yoff ); For Global space, if your format supports active area where the file represents a sub-image of a larger space, this sets the size of your sub-image CPI_Bool cpiSetImageSize( CPI_Metadata meta, CPI_Int32 xsize, CPI_Int32 ysize ); CPI_Bool cpiGetImageSize( CPI_Metadata meta, CPI_Int32 *xsize, CPI_Int32 *ysize ); Other image information CPI_Bool cpiSetImageChannels( CPI_Metadata meta, CPI_Int32 channels ); CPI_Bool cpiGetImageChannels( const CPI_Metadata meta, CPI_Int32 *result ); CPI_Bool cpiSetImageBitDepth( CPI_Metadata meta, CPI_Int32 bitdepth ); CPI_Bool cpiGetImageBitDepth( const CPI_Metadata meta, CPI_Int32 *result ); CPI_Bool cpiSetImageIsLog( CPI_Metadata meta, CPI_Bool islog ); CPI_Bool cpiGetImageIsLog( const CPI_Metadata meta ); CPI_Bool cpiSetImageIsVideo( CPI_Metadata meta, CPI_Bool isvideo ); CPI_Bool cpiGetImageIsVideo( const CPI_Metadata meta ); CPI_Bool cpiSetImageVideoGamma( CPI_Metadata meta, CPI_Float32 gamma ); CPI_Bool cpiGetImageVideoGamma( CPI_Metadata meta, CPI_Float32 *gamma ); CPI_Bool cpiSetImagePixelRatio( CPI_Metadata meta, CPI_Float32 pixelratio ); CPI_Bool cpiGetImagePixelRatio( const CPI_Metadata meta, CPI_Float32 *result ); CPI_Bool cpiSetImageIsPremultiplied( CPI_Metadata meta, CPI_Bool isPremult ); CPI_Bool cpiGetImageIsPremultiplied( const CPI_Metadata meta ); For formats that support more than one frame in a file or for a collection of files from the file manager CPI_Bool cpiSetImageRangeStart( CPI_Metadata meta, CPI_Int32 framestart ); CPI_Bool cpiGetImageRangeStart( const CPI_Metadata meta, CPI_Int32 *result ); CPI_Bool cpiSetImageRangeEnd( CPI_Metadata meta, CPI_Int32 frameend ); CPI_Bool cpiGetImageRangeEnd( const CPI_Metadata meta, CPI_Int32 *result ); CPI_Bool cpiSetImageRangeIncr( CPI_Metadata meta, CPI_Int32 frameincr ); CPI_Bool cpiGetImageRangeIncr( const CPI_Metadata meta, CPI_Int32 *result ); CPI_Bool cpiSetImageSubSupport( CPI_Metadata meta, CPI_Bool onoff ); CPI_Bool cpiGetImageSubSupport( CPI_Metadata meta ); Formats that can have animated parameters need to be able to get the time that they should evaluate their parameters at NOTE : This time is only set for file format plugins! CPI_Bool cpiGetParmEvalTime( CPI_Metadata meta, CPI_Float32 *result );