天天看點

richedit 輸入法輸入表情出現黑色背景的解決辦法

    造成此問題的原因是另存為的時候,GDI+的Gdiplus::Bitmap::FromHBITMAP 或者 Gdiplus::Bitmap::FromBITMAPINFO函數沒有附件alpha值,導緻轉存成png圖檔的時候出了問題,核心代碼如下:

//從richedit過來的資料需要這麼處理下
           
LPDWORD lpBase = (LPDWORD)(pBMInfo->bmiColors + pBMInfo->bmiHeader.biClrUsed);
int    nOffset = lpBI->biCompression == BI_BITFIELDS ? 3 : 0;
pDIBBits = (LPVOID*)(lpBase + nOffset);
           
pWrapBitmap = Gdiplus::Bitmap::FromBITMAPINFO(pBMInfo, pDIBBits);
if (pWrapBitmap)
{
	Gdiplus::BitmapData bitmapData;
	Gdiplus::Rect rcImage(0, 0, pWrapBitmap->GetWidth(), pWrapBitmap->GetHeight());

	pWrapBitmap->LockBits(&rcImage, Gdiplus::ImageLockModeRead, pWrapBitmap->GetPixelFormat(), &bitmapData);
	m_pImage = new (Gdiplus::Bitmap)(bitmapData.Width, bitmapData.Height, bitmapData.Stride, PixelFormat32bppARGB, (BYTE*)bitmapData.Scan0);
	pWrapBitmap->UnlockBits(&bitmapData);
}
           

其中:

pBMInfo為LPBITMAPINFO類型,pDIBBits為資料

繼續閱讀