Important: The information in this document is obsolete and should not be used for new development.
MyCMMFlattenProfile
Handles thekCMMFlattenProfilerequest by extracting profile data from the profile to flatten and passing it to the specified function.A CMM may respond to the
kCMMFlattenProfilerequest code, but it is not required to do so. Most CMMs can rely on the default Apple CMM to handle this request code adequately. The ColorSync Manager sends this request code to your CMM on behalf of an application or device driver that called theCMFlattenProfilefunction. The ColorSync Manager dispatches this request to the Component Manager, which calls your CMM to service the request. A CMM that handles thekCMMFlattenProfilerequest code typically responds by calling a CMM-defined function (for example,MyCMMFlattenProfile).The MyCMMFlattenProfile function is a color management module-defined subroutine.
pascal CMError MyCMMFlattenProfile ( ComponentInstance CMSession, CMProfileRef prof, unsigned long flags, CMFlattenUPP proc, void *refCon);
CMSession- A handle to your CMM's storage for the instance of your component associated with the calling application or device driver.
prof- A reference to the profile to flatten.
flags- Reserved for future use.
proc- A pointer to the
MyColorSyncDataTransferfunction supplied by the calling application or device driver to perform the low-level data transfer. YourMyCMMFlattenProfilefunction calls this function repeatedly as necessary until all the profile data is transferred.
refCon- A reference constant containing data specified by the calling application or device driver.
- function result
- A result code of type CMError. See "Result Codes" (page 3-172) for a list of ColorSync-specific result codes.
DISCUSSION
Only in rare circumstances should a custom CMM need to support this request code. The process of flattening a profile is complex, and the default Apple CMM handles this process adequately for most cases. A custom CMM might respond to this request code if the CMM provides special services such as profile data encryption or compression, for example. Read the rest of this description if your CMM handles this request code.Your
MyCMMFlattenProfilefunction must extract the profile data from the profile to flatten, identified by theprofparameter, and pass the profile data to the function specified in theprocparameter.Your
MyCMMFlattenProfilefunction calls theMyColorSyncDataTransferfunction supplied by the calling application. Here is the prototype for theMyColorSyncDataTransferfunction pointed to by theprocparameter:
pascal OSErr MyColorSyncDataTransfer( long command, long *size, void *data, void *refCon);YourMyCMMFlattenProfilefunction communicates with theMyColorSyncDataTransferfunction using a command parameter to identify the operation to perform. Your function should call theMyColorSyncDataTransferfunction first with theopenWriteSpoolcommand to direct theMyColorSyncDataTransferfunction to begin the process of writing the profile data you pass it in thedatabuffer. Next, you should call theMyColorSyncDataTransferfunction with thewriteSpoolcommand. After theMyColorSyncDataTransferfunction returns in thesizeparameter the amount of data it actually wrote, you should call theMyColorSyncDataTransferfunction again with thewriteSpoolcommand, repeating this process as often as necessary until all the profile data is transferred. After the data is transferred, you should call theMyColorSyncDataTransferfunction with thecloseSpoolcommand.When your function calls the
MyColorSyncDataTransferfunction, it passes in thedatabuffer the profile data to transfer to theMyColorSyncDataTransferfunction and the size in bytes of the buffered data in thesizeparameter. TheMyColorSyncDataTransferfunction may not always write all the data you pass it in thedatabuffer. Therefore, on return theMyColorSyncDataTransferfunction command passes back in thesizeparameter the number of bytes it actually wrote. Your function keeps track of the number of bytes of remaining profile data.Your
MyCMMFlattenProfilefunction is responsible for obtaining the profile data from the profile, allocating a buffer in which to pass the data to theMyColorSyncDataTransferfunction, and keeping track of the amount of remaining data to transfer to theMyColorSyncDataTransferfunction.Each time your
MyCMMFlattenProfilefunction calls theMyColorSyncDataTransferfunction, you pass it the reference constant passed to your function in the reference constant parameter.
 
  
  
 