使用GDI+實現24 點陣圖轉32位點陣圖
今天利用修改影象的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;//重新給傳人的點陣圖賦值。
}