RSS

Alpha blending bitmaps using GDI+

24 Jan

In a 2D image element which stores a color for each pixel(RGB values ),
an additional value is stored.Thats called the alpha channel.
It contains a value ranging from 0 to 1.value 0 means image is fully transparent.
value 1 means fully opeque

Here our focus is to change the value of the alpha channel.
In GDI+ it is much easier to change the alpha channel of an image (compared to GDI ).

We have to use GDI+ header file. #include Gdiplusimaging.h

Lets assum that our image is in the hard disk.
so first we have to load the image.

//define an Image pointer

Image* m_PImage;

Load(const TCHAR* pszPathName)
{
Free();
m_pImage = Image::FromFile(T2CW(pszPathName),m_bUseEmbeddedColorManagement);

}

Free()
{

if (m_pImage)
{
delete m_pImage;
m_pImage = NULL;
}
}

//have to pass the associater device context as a parameter.

AlphaBlend(CDC* pDC)
{
ASSERT(pDC);
Graphics g(pDC->m_hDC);

float fBlend=m_nAlpha; //set the alpha value

ColorMatrix BitmapMatrix = {
1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 0.0f, fBlend, 0.0f,
0.0f, 0.0f, 0.0f, 0.0f, 1.0f
};

ImageAttributes ImgAttr;

ImgAttr.SetColorMatrix(&BitmapMatrix,
ColorMatrixFlagsDefault,
ColorAdjustTypeBitmap);

//Image coordinates and size
RectF destination(m_nX,m_nY,m_nWidth,m_nHeight);

g.DrawImage(m_pImage,destination, 0,0,m_pImage->GetWidth(),m_pImage->GetHeight(),UnitPixel,&ImgAttr);

}

Advertisements
 
1 Comment

Posted by on January 24, 2008 in technology

 

Tags: , , ,

One response to “Alpha blending bitmaps using GDI+

  1. mos

    January 29, 2008 at 3:49 am

    Awesome, thanks. Was going crazy trying to find this in the docs, should have just used Google to start with. 🙂

     

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: