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*);