Fast Bitmap Conversion

I need a fast, reliable way of converting a 24-bit bitmap created by BitBlt() into a 8-bit grey-scale bitmap. If I try to use BitBlt() and capture an 8-bit image on a 24-bit screen, the image captured is *rubbish*. So I capture in 24-bit and I want to convert this image into 8-bit greyscale (pref. using the same type of RGB palette each time i.e. 0=white, 255=black, all numbers in between shades of grey). Code would be appreciated (c pref.) Thanx a lot,
Who is Participating?
chensuConnect With a Mentor Commented:
Download the following sample. Look into the dib.h and dib.c. You can use the ChangeDIBFormat and ChangeDIBPalette functions. You may need to create a grey scale palette yourself. You may also need to use the DIBFromBitmap and BitmapFromDIB functions.

SeedIB.exe Shows 16 and 32 Bits-Per-Pel Bitmap Formats
If you just want RGB to grayscale, do this for each pixel:

  Y = 0.299*R + 0.587*G + 0.114*B

This way of calculating grayscale from RGB is used by TVs. In case you're wondering, color TV signal has a black-and-white channel and two other color channels, this way B&W TV sets can display color TV signals (only the black-and-white channel).

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.