ImageSaver

Availability LightWave 6.0 | Component Layout | Header lwimageio.h

Image savers write image files. Each of them typically supports a single format.

When a saver's activation function is called, it should try to open the output file named in the local structure. If the open fails, the saver can set local->result to IPSTAT_BADFILE and return immediately. Otherwise, the saver creates and initializes an image protocol and calls sendData to tell LightWave it's ready to receive image data. LightWave then calls the saver's callbacks to transfer the data. sendData doesn't return until LightWave calls the saver's done callback.

Activation Function

   XCALL_( int ) MyImageSaver( long version, GlobalFunc *global,
      LWImageSaverLocal *local, void *serverData );

The local argument to an image saver's activation function is an LWImageSaverLocal.

   typedef struct st_LWImageSaverLocal {
      void        *priv_data;
      int          result;
      LWImageType  type;
      const char  *filename;
      LWMonitor   *monitor;
      int         (*sendData) (void *, LWImageProtocolID, int flags);
   } LWImageSaverLocal;
priv_data
Pass this to the sendData function. It's an opaque pointer to data used internally by LightWave.
result
Set this to indicate whether the image was saved successfully. The result codes are
IPSTAT_OK
The image was saved successfully.
IPSTAT_BADFILE
The saver couldn't open the file.
IPSTAT_ABORT
Use this to indicate that the user cancelled the save operation. This can happen if you use the monitor to indicate the progress of a lengthy image saving operation.
IPSTAT_FAILED
An error occurred during saving.
type
The kind of pixel data to be saved. Pixel types are listed on the Image I/O page. The most common types will be LWIMTYP_RGBAFP for color images and LWIMTYP_GREYFP for grayscale images. Use this to decide what kind of pixel data you want to receive. If your file format supports 24-bit color and 8-bit grayscale, for example, you would set your image protocol type to LWIMTYP_RGB24 when the local type field contains any of the RGB types, and LWIMTYP_GREY8 when it contained either LWIMTYP_GREYFP or LWIMTYP_GREY8.
filename
The name of the image file to write.
monitor
A monitor for displaying the progress of the save to the user. You don't have to use this, but you're encouraged to if your image saving takes an unusual amount of time. This is the same structure returned by the monitor global.
result = sendData( priv_data, protocol, flags )
Call this when you're ready to begin receiving image data from LightWave. This will be after you've filled in the fields of an appropriate LWImageProtocol structure, which is described on the Image I/O page. The only flag currently defined is IMGF_REVERSE, which instructs LightWave to send scanlines in bottom-to-top order. When you call sendData, LightWave calls the functions you provided in your image protocol structure to actually save the image. sendData won't return until the image is saved.

Example

The iff sample is a complete IFF ILBM loader and saver.