图片转换,PNG转32位BMP;BMP大小转换
Posted ckrgd
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图片转换,PNG转32位BMP;BMP大小转换相关的知识,希望对你有一定的参考价值。
PNG转32位BMP 使用GDI+方式转换 这种方式转换经测试可以保留PNG图片的透明背景,当然也需要支持32位bmp查看的软件,否则显示黑色背景
1 //头文件 lib 命名空间 2 #include <GdiPlus.h> 3 #pragma comment(lib, "gdiplus.lib") 4 using namespace Gdiplus;//使用命名空间Gdiplus 5 //声明 6 GdiplusStartupInput gdiplusStartupInput;//GDI+环境 7 ULONG_PTR gdiplusToken;//GDI+对象 8 Gdiplus::Image* p_gdiPlusImage;//GDI+图片对象 9 //初始化GDI+ 10 gdiplusToken = NULL;//GDI+对象 11 p_gdiPlusImage = NULL;//GDI+图片对象 12 GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
1 BOOL xxxDlg::picturePngTo32BitBmp() 2 { 3 CString strSrcPicturePath = _T("d:\123.png"); 4 if (PathFileExists(strSrcPicturePath)) 5 { 6 p_gdiPlusImage = Image::FromFile(strSrcPicturePath);// 加载图片文件 7 if (p_gdiPlusImage) 8 { 9 int srcW = p_gdiPlusImage->GetWidth(); 10 int srcH = p_gdiPlusImage->GetHeight(); 11 int dstW = srcW; 12 int dstH = srcH; 13 // 14 UINT nCount = p_gdiPlusImage->GetFrameDimensionsCount(); 15 GUID* pDimensionIDs = new GUID[nCount]; 16 if (pDimensionIDs) 17 { 18 //得到子帧的对象列表 19 p_gdiPlusImage->GetFrameDimensionsList(pDimensionIDs, nCount); 20 //获取总帧数 21 UINT nFrameCount = p_gdiPlusImage->GetFrameCount(&pDimensionIDs[0]); 22 //设置当前需要显示的帧数 23 GUID pageGuid = FrameDimensionTime; 24 for (UINT i = 0; i < nFrameCount; i++) 25 { 26 p_gdiPlusImage->SelectActiveFrame(&pageGuid, i); 27 //GDI+绘图 28 CImage imgDest; 29 imgDest.Create(dstW, dstH, 32); 30 Graphics graphics(imgDest.GetDC()); 31 ImageAttributes imAtt; 32 imAtt.SetWrapMode(WrapModeTileFlipXY); 33 graphics.SetPixelOffsetMode(PixelOffsetModeHalf); 34 graphics.DrawImage(p_gdiPlusImage, Gdiplus::RectF((Gdiplus::REAL)0, (Gdiplus::REAL)0, (Gdiplus::REAL)dstW, 35 (Gdiplus::REAL)dstH), 0, 0, (Gdiplus::REAL)srcW, (Gdiplus::REAL)srcH, UnitPixel, &imAtt); 36 //保存 37 CString strDestPath = _T("d:\321.bmp"); 38 HRESULT hr = imgDest.Save(strDestPath, IMAGE_SAVE_BMP); 39 if (SUCCEEDED(hr)) 40 { 41 AfxMessageBox(_T("成功")); 42 } 43 imgDest.ReleaseDC(); 44 imgDest.Destroy(); 45 } 46 delete pDimensionIDs; 47 pDimensionIDs = NULL; 48 delete p_gdiPlusImage; 49 p_gdiPlusImage = NULL; 50 return TRUE; 51 } 52 else 53 { 54 return FALSE; 55 } 56 57 } 58 else 59 { 60 return FALSE; 61 } 62 } 63 else 64 { 65 return FALSE; 66 } 67 }
以上是关于图片转换,PNG转32位BMP;BMP大小转换的主要内容,如果未能解决你的问题,请参考以下文章