19,468
社区成员
发帖
与我相关
我的任务
分享
#include "AltImage.h"
BOOL ConvPngToBMP(LPCTSTR szPNG, LPCTSTR szDst, COLORREF bkColor=RGB(255,255,255))
{
CImage Image;
if(Image.Load( szPNG ) == S_OK)
{
CDC *pRefDC = CDC::FromHandle(GetDC(NULL));
int cx=Image.GetWidth();
int cy=Image.GetHeight();
CDC memDC;
memDC.CreateCompatibleDC(pRefDC);
CBitmap mBitmap;
mBitmap.CreateCompatibleBitmap(pRefDC, cx, cy);
CBitmap *pOldBitmap = memDC.SelectObject(&mBitmap);
memDC.FillSolidRect(0,0,cx,cy,bkColor);//
Image.AlphaBlend(memDC.GetSafeHdc(), 0, 0);
memDC.SelectObject(pOldBitmap);
memDC.DeleteDC();
DeleteDC(pRefDC->GetSafeHdc());
Image.Destroy();
Image.Attach((HBITMAP)mBitmap);
Image.Save(szDst);
mBitmap.DeleteObject();
return TRUE;
}
return FALSE;
}
#include "gdiplus.h"
using namespace Gdiplus;
#pragma comment(lib, "gdiplus.lib")
INT GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
{
UINT num = 0; // number of image encoders
UINT size = 0; // size of the image encoder array in bytes
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
{
return -1; // Failure
}
pImageCodecInfo = (ImageCodecInfo*)(malloc(size));
if(pImageCodecInfo == NULL)
{
return -1; // Failure
}
GetImageEncoders(num, size, pImageCodecInfo);
for(UINT j = 0; j < num; ++j)
{
if( wcscmp(pImageCodecInfo[j].MimeType, format) == 0 )
{
*pClsid = pImageCodecInfo[j].Clsid;
free(pImageCodecInfo);
return j; // Success
}
}
free(pImageCodecInfo);
return -1; // Failure
}
void Png2Bmp( const LPCWSTR lpczPNGFilePath, LPCWSTR lpBmpPath)
{
CLSID encoderClsid;
Status stat;
Image* image = NULL;
image = Bitmap::FromFile( lpczPNGFilePath, TRUE);
GetEncoderClsid(L"image/bmp", &encoderClsid);
stat = image->Save( lpBmpPath, &encoderClsid, NULL);
delete image;
}