X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fimage.h;fp=src%2Fimage.h;h=b6c6dfbdd9c355ceb2ad670504f77a91c280ebf0;hb=d46a473059b29c03d44430dfc75f170e3eb7cf63;hp=0000000000000000000000000000000000000000;hpb=90155265aeb1ad295a7425df5468123d151f7512;p=rocksndiamonds.git diff --git a/src/image.h b/src/image.h new file mode 100644 index 00000000..b6c6dfbd --- /dev/null +++ b/src/image.h @@ -0,0 +1,110 @@ + +/* image.h */ + +#include "main.h" + +typedef unsigned short Intensity; /* what X thinks an RGB intensity is */ + +/* This struct holds the X-client side bits for a rendered image. */ +typedef struct +{ + Display *disp; /* destination display */ + int scrn; /* destination screen */ + int depth; /* depth of drawable we want/have */ + Drawable drawable; /* drawable to send image to */ + Pixel *index; /* array of pixel values allocated */ + int no; /* number of pixels in the array */ + int rootimage; /* True if is a root image - eg, retain colors */ + Pixel foreground; /* foreground and background pixels for mono images */ + Pixel background; + Colormap cmap; /* colormap used for image */ + GC gc; /* cached gc for sending image */ + XImage *ximage; /* ximage structure */ +} XImageInfo; + +/* Function declarations */ +void sendXImage(); /* send.c */ +XImageInfo *imageToXImage(); +Pixmap ximageToPixmap(); +void freeXImage(); + + +typedef struct rgbmap +{ + unsigned int size; /* size of RGB map */ + unsigned int used; /* number of colors used in RGB map */ + int compressed; /* image uses colormap fully */ + Intensity *red; /* color values in X style */ + Intensity *green; + Intensity *blue; +} RGBMap; + +/* image structure + */ + +typedef struct { + unsigned int type; /* type of image */ + RGBMap rgb; /* RGB map of image if IRGB type */ + unsigned int width; /* width of image in pixels */ + unsigned int height; /* height of image in pixels */ + unsigned int depth; /* depth of image in bits if IRGB type */ + unsigned int pixlen; /* length of pixel if IRGB type */ + byte *data; /* data rounded to full byte for each row */ + float gamma; /* gamma of display the image is adjusted for */ +} Image; + +#define IBITMAP 0 /* image is a bitmap */ +#define IRGB 1 /* image is RGB */ + +#define BITMAPP(IMAGE) ((IMAGE)->type == IBITMAP) +#define RGBP(IMAGE) ((IMAGE)->type == IRGB) + +#define depthToColors(n) DepthToColorsTable[((n) < 24 ? (n) : 24)] + +/* + * Architecture independent memory to value conversions. + * Note the "Normal" internal format is big endian. + */ + +#define memToVal(PTR,LEN) ( \ +(LEN) == 1 ? (unsigned long)( *( (byte *)(PTR)) ) : \ +(LEN) == 2 ? (unsigned long)(((unsigned long)(*( (byte *)(PTR)) ))<< 8) \ + + ( *(((byte *)(PTR))+1) ) : \ +(LEN) == 3 ? (unsigned long)(((unsigned long)(*( (byte *)(PTR)) ))<<16) \ + + (((unsigned long)(*(((byte *)(PTR))+1)))<< 8) \ + + ( *(((byte *)(PTR))+2) ) : \ + (unsigned long)(((unsigned long)(*( (byte *)(PTR)) ))<<24) \ + + (((unsigned long)(*(((byte *)(PTR))+1)))<<16) \ + + (((unsigned long)(*(((byte *)(PTR))+2)))<< 8) \ + + ( *(((byte *)(PTR))+3) ) ) + +#define valToMem(VAL,PTR,LEN) ( \ +(LEN) == 1 ? (*( (byte *)(PTR) ) = ( VAL ) ) : \ +(LEN) == 2 ? (*( (byte *)(PTR) ) = (((unsigned long)(VAL))>> 8), \ + *(((byte *)(PTR))+1) = ( VAL ) ) : \ +(LEN) == 3 ? (*( (byte *)(PTR) ) = (((unsigned long)(VAL))>>16), \ + *(((byte *)(PTR))+1) = (((unsigned long)(VAL))>> 8), \ + *(((byte *)(PTR))+2) = ( VAL ) ) : \ + (*( (byte *)(PTR) ) = (((unsigned long)(VAL))>>24), \ + *(((byte *)(PTR))+1) = (((unsigned long)(VAL))>>16), \ + *(((byte *)(PTR))+2) = (((unsigned long)(VAL))>> 8), \ + *(((byte *)(PTR))+3) = ( VAL ) )) + + +/* functions */ + +extern unsigned long DepthToColorsTable[]; +Image *newBitImage(); +Image *newRGBImage(); +void freeImage(); +void freeImageData(); +void newRGBMapData(); +void freeRGBMapData(); +byte *lcalloc(); +byte *lmalloc(); + +Image *Read_GIF_to_Image(); +Image *monochrome(); +Image *zoom(); + +void compress();