123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- /*
- * LWSDK Header File
- * Copyright 1999, NewTek, Inc.
- *
- * LWIMAGEIO.H -- LightWave Image Input/Ouput
- *
- * This header defines the structures required for basic image I/O.
- * This includes the different image matrix protocols and the local
- * structs for the image loader and image saver.
- */
- #ifndef LWSDK_IMAGEIO_H
- #define LWSDK_IMAGEIO_H
- #include <lwmonitor.h>
- #define LWIMAGELOADER_CLASS "ImageLoader"
- #define LWIMAGELOADER_VERSION 2
- #define LWIMAGESAVER_CLASS "ImageSaver"
- #define LWIMAGESAVER_VERSION 2
- /*
- * Image Pixel Datatypes.
- */
- typedef enum en_LWImageType {
- LWIMTYP_RGB24 = 0,
- LWIMTYP_GREY8,
- LWIMTYP_INDEX8,
- LWIMTYP_GREYFP,
- LWIMTYP_RGBFP,
- LWIMTYP_RGBA32,
- LWIMTYP_RGBAFP,
- LWIMTYP_SPECIAL
- } LWImageType;
- /*
- * Image Pixel Structures.
- */
- typedef void * LWPixelID;
- typedef struct st_LWPixelRGB24 {
- unsigned char r;
- unsigned char g;
- unsigned char b;
- } LWPixelRGB24;
- typedef struct st_LWPixelRGBFP {
- float r;
- float g;
- float b;
- } LWPixelRGBFP;
- typedef struct st_LWPixelRGBA32 {
- unsigned char r;
- unsigned char g;
- unsigned char b;
- unsigned char a;
- } LWPixelRGBA32;
- typedef struct st_LWPixelRGBAFP {
- float r;
- float g;
- float b;
- float a;
- } LWPixelRGBAFP;
- /*
- * Image Buffer Protocol with parameter tags.
- */
- typedef enum en_LWImageParam {
- LWIMPAR_ASPECT = 1, /* x / y Pixel Aspect. */
- LWIMPAR_NUMCOLS,
- LWIMPAR_PIXELWIDTH, /* Actual (scanned)Pixel Width in (mm). */
- LWIMPAR_FRAMESPERSECOND, /* Number Of Frames Per Second. */
- LWIMPAR_BLACKPOINT, /* Black Point Of Layer. */
- LWIMPAR_WHITEPOINT, /* White Point Of Layer. */
- LWIMPAR_GAMMA, /* Linearity Of RGB Color. */
- } LWImageParam;
- typedef struct st_LWImageProtocol {
- int type;
- void *priv_data;
- int (*done) (void *, int);
- void (*setSize) (void *, int w, int h);
- void (*setParam) (void *, LWImageParam, int, float);
- int (*sendLine) (void *, int, const LWPixelID);
- void (*setMap) (void *, int, const unsigned char[3]);
- } LWImageProtocol, *LWImageProtocolID;
- /*
- * "ImageLoader" local struct.
- */
- typedef struct st_LWImageLoaderLocal {
- void *priv_data;
- int result;
- const char *filename;
- LWMonitor *monitor;
- LWImageProtocolID (*begin) (void *, LWImageType);
- void (*done) (void *, LWImageProtocolID);
- } LWImageLoaderLocal;
- /*
- * "ImageSaver" local struct.
- */
- typedef struct st_LWImageSaverLocal {
- void *priv_data;
- int result;
- LWImageType type;
- const char *filename;
- LWMonitor *monitor;
- int (*sendData) (void *, LWImageProtocolID, int flags);
- } LWImageSaverLocal;
- /*
- Result Value
- The result value indicates the status of the loader or saver upon
- completion. If the load or save was sucessful, the value should be
- IPSTAT_OK. If a loader fails to recognize a file as something it can load
- it should set the result to IPSTAT_NOREC. If the server could not open
- the file it should return IPSTAT_BADFILE. Any other error is just a
- generic failure of the loader or saver and so should set the result to
- IPSTAT_FAILED. Other failure modes might be possible if required
- in the future.
- */
- #define IPSTAT_OK 0
- #define IPSTAT_NOREC 1
- #define IPSTAT_BADFILE 2
- #define IPSTAT_ABORT 3
- #define IPSTAT_FAILED 99
- /* Flags to be passed to 'setSize' and 'sendData' callbacks. */
- #define IMGF_REVERSE (1<<0)
- /* There are also some protocol macros defined
- to get the whole calling interface right. */
- #define LWIP_SETSIZE(p,w,h) (*(p)->setSize) ((p)->priv_data,w,h)
- #define LWIP_SETPARAM(p,t,i,f) (*(p)->setParam) ((p)->priv_data,t,i,f)
- #define LWIP_ASPECT(p,a) LWIP_SETPARAM (p, LWIMPAR_ASPECT, 0, a)
- #define LWIP_NUMCOLORS(p,n) LWIP_SETPARAM (p, LWIMPAR_NUMCOLS, n, 0.0)
- #define LWIP_SENDLINE(p,ln,d) (*(p)->sendLine) ((p)->priv_data,ln,d)
- #define LWIP_SETMAP(p,i,val) (*(p)->setMap) ((p)->priv_data,i,val)
- #define LWIP_DONE(p,err) (*(p)->done) ((p)->priv_data,err)
- /*
- Compatibility macros.
- These types are obsolete, but are included to make it easier to convert
- to the new image format. The IMG_* value have been replaced with the
- LWImageType type codes, although the values of 0, 1 and 2 map to equivalent
- types. The ImageValue type is gone completely, and a Pixel* structure
- type should be used, or an explicit reference to unsigned char.
- */
- #define IMG_RGB24 0
- #define IMG_GREY8 1
- #define IMG_INDEX8 2
- typedef unsigned char ImageValue;
- #endif
|