今天利用修改图像的alpha通道实现了图像的倒影,但是在对图像进行测试的时候,发现24位的位图不能实现倒影,究其原因是24位以下的图像没有alpha通道,也就没办法利用修改alpha通道的方式去实现图像的倒影。于是就想办法实现24位图像转成32位图像。也就能具有alpha通道了。此时利用了GDI+的一些特性。现将程序共享。
BOOL GetBitmapData(Bitmap *pBitmap, PixelFormat pixelFormat, BitmapData *data)
{
Bitmap *bmp = pBitmap;
Gdiplus::Rect r(0, 0, bmp->GetWidth(), bmp->GetHeight());
UINT pixelSize = GetPixelFormatSize(pixelFormat);
data->Stride = ((pixelSize * r.Width + 31) & 0xffffffe0) >> 3;
data->Scan0 = (void*)new char[r.Height * data->Stride];
bmp->LockBits(&r, ImageLockModeRead | ImageLockModeUserInputBuf,
pixelFormat, data);
bmp->UnlockBits(data);
//delete bmp;
return TRUE;
}
//参数pBitmap为传人的24位的位图。
void CHange24To32(Bitmap *pBitmap)
{
BitmapData data;
if (!GetBitmapData(pBitmap, PixelFormat32bppARGB, &data))
return;
if(pBitmap)
delete pBitmap;
// 建立一个24位像素格式的自定义数据位图对象
Bitmap *bmp = new Bitmap(data.Width, data.Height, data.Stride,
data.PixelFormat, (BYTE*)data.Scan0);
pBitmap=bmp;//重新给传人的位图赋值。
}