X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=blobdiff_plain;f=src%2Fimage.h;h=0561257f17832d5bdae66fca952d7949c43d5d38;hp=e1160c18494524c6c96b62bbbc26bad9d0804ef9;hb=ab0879a8bcb3e816912bc89b8e21c22cc2a4c0c2;hpb=9e0e44d9596ef874ec5d1e1bd749748c3a9e93f0 diff --git a/src/image.h b/src/image.h index e1160c18..0561257f 100644 --- a/src/image.h +++ b/src/image.h @@ -1,69 +1,67 @@ - -/* image.h */ +/*********************************************************** +* Rocks'n'Diamonds -- McDuffin Strikes Back! * +*----------------------------------------------------------* +* (c) 1995-98 Artsoft Entertainment * +* Holger Schemel * +* Oststrasse 11a * +* 33604 Bielefeld * +* phone: ++49 +521 290471 * +* email: aeglos@valinor.owl.de * +*----------------------------------------------------------* +* image.h * +***********************************************************/ + +#ifndef IMAGE_H +#define IMAGE_H #include "main.h" +#define MAX_COLORS 256 /* maximal number of colors for each image */ + 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 */ + Display *display; /* destination display */ + int screen; /* 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 */ + Colormap cmap; /* colormap used for image */ + GC gc; /* cached gc for sending image */ + GC gc_mask; /* cached gc for sending image mask */ + XImage *ximage; /* ximage structure */ + XImage *ximage_mask;/* ximage structure of mask */ + Pixmap pixmap; /* final pixmap */ + Pixmap pixmap_mask; /* final pixmap of mask */ } XImageInfo; -/* Function declarations */ -void sendXImage(); /* send.c */ -XImageInfo *imageToXImage(); -Pixmap ximageToPixmap(); -void freeXImage(); - - -typedef struct rgbmap +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; + unsigned int used; /* number of colors used in RGB map */ + Intensity red[MAX_COLORS]; /* color values in X style */ + Intensity green[MAX_COLORS]; + Intensity blue[MAX_COLORS]; + boolean color_used[MAX_COLORS]; /* flag if color cell is used */ +}; -/* 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 */ +typedef struct +{ + struct 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 */ + byte *data; /* image data */ + byte *data_mask; /* clip mask data */ } 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. + * architecture independent memory-to-value conversions + * note: the internal format is big endian */ #define memToVal(PTR,LEN) ( \ @@ -90,26 +88,18 @@ typedef struct { *(((byte *)(PTR))+2) = (((unsigned long)(VAL))>> 8), \ *(((byte *)(PTR))+3) = ( VAL ) )) +#define PCX_Success 0 +#define PCX_OpenFailed -1 +#define PCX_ReadFailed -2 +#define PCX_FileInvalid -3 +#define PCX_NoMemory -4 +#define PCX_ColorFailed -5 -/* 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(); +int Read_PCX_to_Pixmaps(Display *, Window, char *, Pixmap *, Pixmap *); -void compress(); +Image *Read_PCX_to_Image(); +Image *newImage(); +void freeImage(); +void freeXImage(); -Pixmap XImage_to_Pixmap(Display *, Window, XImageInfo *); -XImageInfo *Image_to_XImage(Display *, int, Visual *, unsigned int, Image *); -void XImage_to_Drawable(XImageInfo *, int, int, int, int, - unsigned int, unsigned int); +#endif /* IMAGE_H */