#include #include #include #include #define WIDTH 320 #define HEIGHT 240 #define RSIZE 4 #define GSIZE 4 #define BSIZE 4 Display *dpy; int scr; Window win; GC gc; XColor defs[RSIZE][GSIZE][BSIZE]; XImage *image, *image2; int use_truecolor=0; int nshift_red, nshift_green, nshift_blue; static int getshiftbit(unsigned long mask) { int i, n; for (i=0; i>= 1; } return(-1); } int check24() { if (DefaultDepth(dpy,scr) == 24) { XVisualInfo xvit, *xvi; int n, i; xvit.depth = 24; xvit.class = TrueColor; xvi = XGetVisualInfo(dpy,VisualDepthMask|VisualClassMask,&xvit,&n); if (xvi) { for (i=0; ired_mask); nshift_green = getshiftbit(xvi->green_mask); nshift_blue = getshiftbit(xvi->blue_mask); if (nshift_red >= 0 && nshift_green >= 0 && nshift_blue >= 0) { use_truecolor=1; return(1); } xvi++; } } } return(0); } XImage *init_ximage(int w,int h) { int format, bitmap_pad, depth; XImage *image; depth = DefaultDepth(dpy,scr); if (depth == 1) { format = XYPixmap; bitmap_pad = 32; } else if (depth == 8){ format = ZPixmap; bitmap_pad = 8; } else if (depth == 16){ format = ZPixmap; bitmap_pad = 16; } else if (depth==24) { format = ZPixmap; bitmap_pad = 32; } else { fprintf(stderr,"unsupported depth %d\n",depth); exit(-1); } image = XCreateImage(dpy,DefaultVisual(dpy,scr),depth,format,0,0, w,h,bitmap_pad,0); if (image == 0) { fprintf(stderr,"XImage structure allocation failure\n"); exit(-1); } if ((image->data =(char *) malloc(image->bytes_per_line * h)) == NULL) { fprintf(stderr,"image memory allocation failure\n"); exit(-1); } return(image); } void init_cmap() { Colormap cmap; int i,j,k; check24(); if (use_truecolor) return; cmap=DefaultColormap(dpy,scr); for (i=0; i bayer[x%N_DITH][y%N_DITH] * span) return(n+1); else return(n); } void set_rgb(XImage *image,int x0,int y0,unsigned char *data,int w,int h) { int x,y; unsigned int r,g,b; unsigned long red,green,blue,pxl; unsigned char *s=data; for (y=y0; y=width-16) x2n=width-16; break; case 'k': y2n=y2-16; if (y2n<0) y2n=0; break; case 'j': y2n=y2+16; if (y2n>=height-16) y2n=height-16; break; } } XPutImage(dpy,win,gc,image,x2,y2,x2,y2,16,16); XPutImage(dpy,win,gc,image2,0,0,x2n,y2n,16,16); x2=x2n;y2=y2n; break; default: break; } } }