xref: /plan9/sys/src/cmd/jpg/imagefile.h (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
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