分享

GDI+实现24位位图转32位

 ytkomn 2011-09-28

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多