Go back to Richel Bilderbeek's homepage.
Go back to Richel Bilderbeek's C++ page.
Graphics code snippet to convert a color VCL TImage to a grey TImage.
In the 'ConvertToGrey' example image you see an original color image, this image converted to grey and the result of a histogram equalization on the grey image.
* View an example of an image converted to grey
* View the code of 'ConvertToGrey' in plain text
//From http://www.richelbilderbeek.nl/CppConvertToGrey.htm
void ConvertToGrey(const TImage * const source, TImage * const target)
{
assert(source!=0 && "Source image is NULL");
assert(target!=0 && "Target image is NULL");
assert(source->Picture->Bitmap!=0 && "Source bitmap is NULL");
assert(target->Picture->Bitmap!=0 && "Target bitmap is NULL");
assert(source->Picture->Bitmap->PixelFormat == pf24bit && "Source bitmap must be 24 bit");
assert(target->Picture->Bitmap->PixelFormat == pf24bit && "Target bitmap must be 24 bit");
//Get the width and height from the source
const int width = source->Picture->Bitmap->Width;
const int height = source->Picture->Bitmap->Height;
//Set the target's width and height
target->Picture->Bitmap->Width = width;
target->Picture->Bitmap->Height = height;
{
const unsigned char * lineSource
= static_cast<const unsigned char *>(
source->Picture->Bitmap->ScanLine[y]);
= static_cast<unsigned char *>(
target->Picture->Bitmap->ScanLine[y]);
{
const int grey
= (lineSource[x*3+0] + lineSource[x*3+1] + lineSource[x*3+2]) / 3;
lineTarget[x*3+0]=grey; //Blue
lineTarget[x*3+1]=grey; //Green
lineTarget[x*3+2]=grey; //Red
}
}
}
Go back to Richel Bilderbeek's C++ page.
Go back to Richel Bilderbeek's homepage.