If you don't need a color conversion it's even more simple. You need something like this:
void DrawBitmap(BitmapType *bmp) { UInt16 err; BitmapType *myBmp; UInt8 *src, *dst; Int16 i; myBmp = BmpCreate( bmp->width, bmp->height, 4, NULL, &err ); if ( err != errNone ) return; src = (UInt8*) BmpGetBits( bmp ); dst = (UInt8*) BmpGetBits( myBmp ); // convert from 8 bit to 4 bit grayscale for ( i = 0; i < bmp->width * bmp->height / 2; i++ ) { UInt8 b, bHi, bLo; b = *src++; bHi = b >> 4; // 8bit -> 4bit - we ignore 4 low bits b = *src++; bLo = b >> 4; *dst++ = (bHi<<4) | bLo; } WinDrawBitmap( myBmp, 0, 0 ); BmpDelete( myBmp ); } Very simple isn't it? What's the problem? If the original bitmap has 0 value as black and 255 as white (standard grayscale format) you need to invert it (just use ~(b>>4) in conversion). For color original bitmap you should get RGB from the palette for every pixel and convert to grayscale using formula like I wrote in my previous letter. Good luck, Alex PS. It's for PalmOS 3.5 of course. For earlier versions you have to write your own BmpXXXX() functions. But it's not difficult. ----- Original Message ----- From: "Hans Han" Sent: Monday, November 13, 2000 12:38 PM Subject: Re: How to convert a 8-bits bitmaps to 4-bits Grayscale bitmaps > Hi, > > For preformance reason, I want write on the Bitmap data area of an > offscreen window directly while I receive the bitmap from network. The > pixel size of window is 4 , so how to covert the 8-bits grayscale values to > 4-bits index value? Wait for help. > > Regrads > > Hans > ----- Original Message ----- > From: "Hans Han" > Sent: Friday, November 10, 2000 4:12 PM > Subject: How to convert a 8-bits bitmaps to 4-bits Grayscale bitmaps > > > > Hi All, > > > > > > I wonder how to convert 8-bits bitmaps to 4-bits Grayscale bitmaps.Any > tips > > or sourcecode are welcome. > > > > Thanks > > > > Hans -- For information on using the ACCESS Developer Forums, or to unsubscribe, please see http://www.access-company.com/developers/forums/