2 #include <Xw_Extension.h>
4 /* ifdef then trace on */
7 #define TRACE_PUT_PIXEL
12 XW_STATUS Xw_put_pixel (aimage,x,y,index,npixel):
13 XW_EXT_IMAGEDATA *aimage
14 int x,y Pixel position
15 int index Pixel color index
16 int npixel Pixel number to fill with the same color index
18 Fill an existing IMAGE created by Xw_open_image from Pixel index
20 returns XW_ERROR if Extended Image is not defined
21 or Color is not defined
22 or Pixel position is wrong (Outside of image)
23 returns XW_SUCCESS if successful
28 XW_STATUS Xw_put_pixel (void *aimage,int x,int y,int index,int npixel)
30 XW_STATUS Xw_put_pixel (aimage,x,y,index,npixel)
32 int x,y,index,npixel ;
33 #endif /*XW_PROTOTYPE*/
35 XW_EXT_IMAGEDATA *pimage = (XW_EXT_IMAGEDATA*) aimage ;
38 unsigned char *cdata ;
39 unsigned short *sdata ;
40 unsigned long *ldata ;
42 unsigned long lpixel ;
44 int fpixel,epixel,simage ;
47 if( !Xw_isdefine_image(pimage) ) {
48 /*ERROR*Bad EXT_IMAGEDATA Address*/
49 Xw_set_error(25,"Xw_put_pixel",pimage) ;
53 if( !Xw_isdefine_color(_ICOLORMAP,index) ) {
54 /*ERROR*Bad Defined Color at index*/
55 Xw_set_error(41,"Xw_put_pixel",&index) ;
59 pximage = (_ZIMAGE) ? _ZIMAGE : _IIMAGE;
60 simage = pximage->height*pximage->width ;
61 fpixel = x*pximage->width + y ;
62 epixel = fpixel + npixel - 1 ;
64 if( x < 0 || y < 0 || (epixel >= simage) ) {
65 /*WARNING*Bad PIXEL position*/
66 Xw_set_error(47,"Xw_put_pixel",&simage) ;
70 lpixel = _ICOLORMAP->pixels[index] ;
71 switch (pximage->bitmap_pad) {
73 { register unsigned char cpixel = (unsigned char) lpixel ;
74 data.data = pximage->data + (fpixel) ;
75 for( np=npixel ; np ; --np ) *data.cdata++ = cpixel ;
79 { register unsigned short spixel = (unsigned short) lpixel ;
80 data.data = pximage->data + (fpixel<<1) ;
81 for( np=npixel ; np ; --np ) *data.sdata++ = spixel ;
85 data.data = pximage->data + (fpixel<<2) ;
86 for( np=npixel ; np ; --np ) *data.ldata++ = lpixel ;
89 #ifdef TRACE_PUT_PIXEL
90 printf (" Xw_put_pixel(%x,%d,%d,%d,%d)\n",
91 pimage,x,y,index,npixel) ;