求个一个png转bmp的类或者函数 如题 ,我由于某些原因,必须自己解码,麻烦大家谁以前写过 ,给个源码!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我只有一些VB的PNG到BMP的代码,而且写的很复杂。c的建议年看看GIMP的代码、 GDI+ 也不能用?GdiplusStartupInput gdiplusStartupInput;ULONG_PTR gdiplusToken;GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);Png2Bmp( L"e:\\fish.png", L"e:\\fish.bmp" );#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;} Cimage image;iamge.load();image.save(); #include <atlimage.h>CImage image;image.Load(_T("PNG文件名称");image.Save(_T("BMP文件名称"); 有时SetCursor()函数不起作用,怎么回事? 视图类初始化中无法创建对话框 那位大哥有象 access的表 那样的列表类啊~~~?? 奇怪的问题((IF语句) 请教:当xml为UTF-8时为什么IXMLDOMDocument2会出错? 极其郁闷!!!!再散一分!!!! 怎么将两个控件的尺寸变得一样? 请问怎样发送一个自定义消息? 送分了,怎么把两个char* 加起来成为一个char*;两个char*都是非const的! 菜单栏项的属性为PopUp时,如何设置点些这项的快捷键 CImage 和GDIPLUS Image 各自优缺点是什么?用哪一个比较好? 设备怎么找不到?
c的建议年看看GIMP的代码、
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;
GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);Png2Bmp( L"e:\\fish.png", L"e:\\fish.bmp" );
#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;
}
iamge.load();
image.save();
image.Load(_T("PNG文件名称");
image.Save(_T("BMP文件名称");