xref: /plan9/sys/src/cmd/jpg/imagefile.h (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
17dd7cddfSDavid du Colombier typedef struct Rawimage Rawimage;
27dd7cddfSDavid du Colombier 
37dd7cddfSDavid du Colombier struct Rawimage
47dd7cddfSDavid du Colombier {
57dd7cddfSDavid du Colombier 	Rectangle	r;
67dd7cddfSDavid du Colombier 	uchar	*cmap;
77dd7cddfSDavid du Colombier 	int		cmaplen;
87dd7cddfSDavid du Colombier 	int		nchans;
959cc4ca5SDavid du Colombier 	uchar	*chans[4];
107dd7cddfSDavid du Colombier 	int		chandesc;
117dd7cddfSDavid du Colombier 	int		chanlen;
127dd7cddfSDavid du Colombier 
137dd7cddfSDavid du Colombier 	int		fields;    	/* defined by format */
147dd7cddfSDavid du Colombier 	int		gifflags;	/* gif only; graphics control extension flag word */
157dd7cddfSDavid du Colombier 	int		gifdelay;	/* gif only; graphics control extension delay in cs */
167dd7cddfSDavid du Colombier 	int		giftrindex;	/* gif only; graphics control extension transparency index */
177dd7cddfSDavid du Colombier 	int		gifloopcount;	/* number of times to loop in animation; 0 means forever */
187dd7cddfSDavid du Colombier };
197dd7cddfSDavid du Colombier 
207dd7cddfSDavid du Colombier enum
217dd7cddfSDavid du Colombier {
227dd7cddfSDavid du Colombier 	/* Channel descriptors */
237dd7cddfSDavid du Colombier 	CRGB	= 0,	/* three channels, no map */
247dd7cddfSDavid du Colombier 	CYCbCr	= 1,	/* three channels, no map, level-shifted 601 color space */
257dd7cddfSDavid du Colombier 	CY	= 2,	/* one channel, luminance */
267dd7cddfSDavid du Colombier 	CRGB1	= 3,	/* one channel, map present */
277dd7cddfSDavid du Colombier 	CRGBV	= 4,	/* one channel, map is RGBV, understood */
287dd7cddfSDavid du Colombier 	CRGB24	= 5,	/* one channel in correct data order for loadimage(RGB24) */
2959cc4ca5SDavid du Colombier 	CRGBA32	= 6,	/* one channel in correct data order for loadimage(RGBA32) */
3059cc4ca5SDavid du Colombier 	CYA16	= 7,	/* one channel in correct data order for loadimage(Grey8+Alpha8) */
3159cc4ca5SDavid du Colombier 	CRGBVA16= 8,	/* one channel in correct data order for loadimage(CMAP8+Alpha8) */
327dd7cddfSDavid du Colombier 
337dd7cddfSDavid du Colombier 	/* GIF flags */
347dd7cddfSDavid du Colombier 	TRANSP	= 1,
357dd7cddfSDavid du Colombier 	INPUT	= 2,
367dd7cddfSDavid du Colombier 	DISPMASK = 7<<2
377dd7cddfSDavid du Colombier };
387dd7cddfSDavid du Colombier 
3980ee5cbfSDavid du Colombier 
4080ee5cbfSDavid du Colombier enum{	/* PNG flags */
4180ee5cbfSDavid du Colombier 	II_GAMMA =	1 << 0,
4280ee5cbfSDavid du Colombier 	II_COMMENT =	1 << 1,
4380ee5cbfSDavid du Colombier };
4480ee5cbfSDavid du Colombier 
4580ee5cbfSDavid du Colombier typedef struct ImageInfo {
4680ee5cbfSDavid du Colombier 	ulong	fields_set;
4780ee5cbfSDavid du Colombier 	double	gamma;
4880ee5cbfSDavid du Colombier 	char	*comment;
4980ee5cbfSDavid du Colombier } ImageInfo;
5080ee5cbfSDavid du Colombier 
5180ee5cbfSDavid du Colombier 
527dd7cddfSDavid du Colombier Rawimage**	readjpg(int, int);
537dd7cddfSDavid du Colombier Rawimage**	Breadjpg(Biobuf *b, int);
54*9a747e4fSDavid du Colombier Rawimage**	readpng(int, int);
55*9a747e4fSDavid du Colombier Rawimage**	Breadpng(Biobuf *b, int);
567dd7cddfSDavid du Colombier Rawimage**	readgif(int, int);
577dd7cddfSDavid du Colombier Rawimage**	readpixmap(int, int);
587dd7cddfSDavid du Colombier Rawimage*	torgbv(Rawimage*, int);
597dd7cddfSDavid du Colombier Rawimage*	totruecolor(Rawimage*, int);
607dd7cddfSDavid du Colombier int		writerawimage(int, Rawimage*);
617dd7cddfSDavid du Colombier void*		_remaperror(char*, ...);
627dd7cddfSDavid du Colombier 
637dd7cddfSDavid du Colombier typedef struct Memimage Memimage;	/* avoid necessity to include memdraw.h */
647dd7cddfSDavid du Colombier 
657dd7cddfSDavid du Colombier char*		startgif(Biobuf*, Image*, int);
667dd7cddfSDavid du Colombier char*		writegif(Biobuf*, Image*, char*, int, int);
677dd7cddfSDavid du Colombier void		endgif(Biobuf*);
687dd7cddfSDavid du Colombier char*		memstartgif(Biobuf*, Memimage*, int);
697dd7cddfSDavid du Colombier char*		memwritegif(Biobuf*, Memimage*, char*, int, int);
707dd7cddfSDavid du Colombier void		memendgif(Biobuf*);
717dd7cddfSDavid du Colombier Image*		onechan(Image*);
727dd7cddfSDavid du Colombier Memimage*	memonechan(Memimage*);
737dd7cddfSDavid du Colombier 
747dd7cddfSDavid du Colombier char*		writeppm(Biobuf*, Image*, char*);
757dd7cddfSDavid du Colombier char*		memwriteppm(Biobuf*, Memimage*, char*);
767dd7cddfSDavid du Colombier Image*		multichan(Image*);
777dd7cddfSDavid du Colombier Memimage*	memmultichan(Memimage*);
7880ee5cbfSDavid du Colombier 
7980ee5cbfSDavid du Colombier char*		memwritepng(Biobuf*, Memimage*, ImageInfo*);
80