1 typedef struct Rawimage Rawimage; 2 3 struct Rawimage 4 { 5 Rectangle r; 6 uchar *cmap; 7 int cmaplen; 8 int nchans; 9 uchar *chans[4]; 10 int chandesc; 11 int chanlen; 12 13 int fields; /* defined by format */ 14 int gifflags; /* gif only; graphics control extension flag word */ 15 int gifdelay; /* gif only; graphics control extension delay in cs */ 16 int giftrindex; /* gif only; graphics control extension transparency index */ 17 int gifloopcount; /* number of times to loop in animation; 0 means forever */ 18 }; 19 20 enum 21 { 22 /* Channel descriptors */ 23 CRGB = 0, /* three channels, no map */ 24 CYCbCr = 1, /* three channels, no map, level-shifted 601 color space */ 25 CY = 2, /* one channel, luminance */ 26 CRGB1 = 3, /* one channel, map present */ 27 CRGBV = 4, /* one channel, map is RGBV, understood */ 28 CRGB24 = 5, /* one channel in correct data order for loadimage(RGB24) */ 29 CRGBA32 = 6, /* one channel in correct data order for loadimage(RGBA32) */ 30 CYA16 = 7, /* one channel in correct data order for loadimage(Grey8+Alpha8) */ 31 CRGBVA16= 8, /* one channel in correct data order for loadimage(CMAP8+Alpha8) */ 32 33 /* GIF flags */ 34 TRANSP = 1, 35 INPUT = 2, 36 DISPMASK = 7<<2 37 }; 38 39 40 enum{ /* PNG flags */ 41 II_GAMMA = 1 << 0, 42 II_COMMENT = 1 << 1, 43 }; 44 45 typedef struct ImageInfo { 46 ulong fields_set; 47 double gamma; 48 char *comment; 49 } ImageInfo; 50 51 52 Rawimage** readjpg(int, int); 53 Rawimage** Breadjpg(Biobuf *b, int); 54 Rawimage** readpng(int, int); 55 Rawimage** Breadpng(Biobuf *b, int); 56 Rawimage** readgif(int, int); 57 Rawimage** readpixmap(int, int); 58 Rawimage* torgbv(Rawimage*, int); 59 Rawimage* totruecolor(Rawimage*, int); 60 int writerawimage(int, Rawimage*); 61 void* _remaperror(char*, ...); 62 63 typedef struct Memimage Memimage; /* avoid necessity to include memdraw.h */ 64 65 char* startgif(Biobuf*, Image*, int); 66 char* writegif(Biobuf*, Image*, char*, int, int); 67 void endgif(Biobuf*); 68 char* memstartgif(Biobuf*, Memimage*, int); 69 char* memwritegif(Biobuf*, Memimage*, char*, int, int); 70 void memendgif(Biobuf*); 71 Image* onechan(Image*); 72 Memimage* memonechan(Memimage*); 73 74 char* writeppm(Biobuf*, Image*, char*); 75 char* memwriteppm(Biobuf*, Memimage*, char*); 76 Image* multichan(Image*); 77 Memimage* memmultichan(Memimage*); 78 79 char* memwritepng(Biobuf*, Memimage*, ImageInfo*); 80