今天利用修改图像的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;//重新给传人的位图赋值。 }
|