$WW,1$GR graphics files are 8-bits-per-pixels but only 4-bits of color, with transparency and no palette.  Compression is the standard ZealOS$FG$ LZW compression.
$HL,1$
#define DCF_COMPRESSED	1 //This is the only saved flag.
#define DCF_PALETTE 	2

#define TRANSPARENT	0xFF
#define BLACK		0
#define BLUE		1
#define GREEN		2
#define CYAN		3
#define RED			4
#define PURPLE		5
#define BROWN		6
#define LTGRAY		7
#define DKGRAY		8
#define LTBLUE		9
#define LTGREEN		10
#define LTCYAN		11
#define LTRED		12
#define LTPURPLE	13
#define YELLOW		14
#define WHITE		15

class CBGR48
{
	U16 	r, g, b, pad;
};

CBGR48 gr_palette_std[16] = {

0x000000000000, 0x00000000AAAA, 0x0000AAAA0000, 0x0000AAAAAAAA,
0xAAAA00000000, 0xAAAA0000AAAA, 0xAAAA55550000, 0xAAAAAAAAAAAA,
0x555555555555, 0x55555555FFFF, 0x5555FFFF5555, 0x5555FFFFFFFF,
0xFFFF55555555, 0xFFFF5555FFFF, 0xFFFFFFFF5555, 0xFFFFFFFFFFFF};

class GRFile
{
	I32 	width;
	I32 	width_internal; //Rounded-up to multiple of 8.
	I32 	height;
	I32 	flags;			//DCF_COMPRESSED? See $LK,"::/Kernel/Compress.CC"$.
	CBGR48  palette[16]; 	//Included if DCF_PALETTE.
	U8		body[];
};$HL,0$

See $LK,"DCSave",A="MN:DCSave"$(), $LK,"GRWrite",A="MN:GRWrite"$(), $LK,"DCLoad",A="MN:DCLoad"$(), and $LK,"GRRead",A="MN:GRRead"$().