typedef struct Rawimage Rawimage;
struct Rawimage
{
Rectangle r;
uchar *cmap;
int cmaplen;
int nchans;
uchar *chans[4];
int chandesc;
int chanlen;
int fields; /* defined by format */
int gifflags; /* gif only; graphics control extension flag word */
int gifdelay; /* gif only; graphics control extension delay in cs */
int giftrindex; /* gif only; graphics control extension transparency index */
int gifloopcount; /* number of times to loop in animation; 0 means forever */
};
enum
{
/* Channel descriptors */
CRGB = 0, /* three channels, no map */
CYCbCr = 1, /* three channels, no map, level-shifted 601 color space */
CY = 2, /* one channel, luminance */
CRGB1 = 3, /* one channel, map present */
CRGBV = 4, /* one channel, map is RGBV, understood */
CRGB24 = 5, /* one channel in correct data order for loadimage(RGB24) */
CRGBA32 = 6, /* one channel in correct data order for loadimage(RGBA32) */
CYA16 = 7, /* one channel in correct data order for loadimage(Grey8+Alpha8) */
CRGBVA16= 8, /* one channel in correct data order for loadimage(CMAP8+Alpha8) */
/* GIF flags */
TRANSP = 1,
INPUT = 2,
DISPMASK = 7<<2
};
enum{ /* PNG flags */
II_GAMMA = 1 << 0,
II_COMMENT = 1 << 1,
};
typedef struct ImageInfo {
ulong fields_set;
double gamma;
char *comment;
} ImageInfo;
Rawimage** readjpg(int, int);
Rawimage** Breadjpg(Biobuf *b, int);
Rawimage** readpng(int, int);
Rawimage** Breadpng(Biobuf *b, int);
Rawimage** readgif(int, int);
Rawimage** readpixmap(int, int);
Rawimage* torgbv(Rawimage*, int);
Rawimage* totruecolor(Rawimage*, int);
int writerawimage(int, Rawimage*);
void* _remaperror(char*, ...);
typedef struct Memimage Memimage; /* avoid necessity to include memdraw.h */
char* startgif(Biobuf*, Image*, int);
char* writegif(Biobuf*, Image*, char*, int, int);
void endgif(Biobuf*);
char* memstartgif(Biobuf*, Memimage*, int);
char* memwritegif(Biobuf*, Memimage*, char*, int, int);
void memendgif(Biobuf*);
Image* onechan(Image*);
Memimage* memonechan(Memimage*);
char* writeppm(Biobuf*, Image*, char*);
char* memwriteppm(Biobuf*, Memimage*, char*);
Image* multichan(Image*);
Memimage* memmultichan(Memimage*);
char* memwritepng(Biobuf*, Memimage*, ImageInfo*);
|