1. 程式人生 > >使用GDI+實現24 點陣圖轉32位點陣圖

使用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;//重新給傳人的點陣圖賦值。
}