今天利用修改圖像的alpha通道實現(xiàn)了圖像的倒影,但是在對圖像進行測試的時候,發(fā)現(xiàn)24位的位圖不能實現(xiàn)倒影,究其原因是24位以下的圖像沒有alpha通道,也就沒辦法利用修改alpha通道的方式去實現(xiàn)圖像的倒影。于是就想辦法實現(xiàn)24位圖像轉(zhuǎn)成32位圖像。也就能具有alpha通道了。此時利用了GDI+的一些特性?,F(xiàn)將程序共享。
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; } //參數(shù)pBitmap為傳人的24位的位圖。
void CHange24To32(Bitmap *pBitmap) { BitmapData data; if (!GetBitmapData(pBitmap, PixelFormat32bppARGB, &data)) return; if(pBitmap) delete pBitmap; // 建立一個24位像素格式的自定義數(shù)據(jù)位圖對象 Bitmap *bmp = new Bitmap(data.Width, data.Height, data.Stride, data.PixelFormat, (BYTE*)data.Scan0); pBitmap=bmp;//重新給傳人的位圖賦值。 }
|