如何将JPG图片转换成BMP格式 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用CImage类,直接Load就可以了。 直接使用CImage Load和Save就行了msdn里面SimpleImage例子,楼主可以看看 VC6下面可以这么处理:IPicture *pPic; IStream *pStm; CFileStatus fstatus; CFile file; LONG cb; if (file.Open("c:/test.jpg",CFile::modeRead)&&file.GetStatus("c:/test.jpg", fstatus)&& ((cb = fstatus.m_size) != -1)) { HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb); LPVOID pvData = NULL; if (hGlobal != NULL) { if ((pvData = GlobalLock(hGlobal)) != NULL) { file.ReadHuge(pvData, cb); GlobalUnlock(hGlobal); CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID* )&pPic))) { OLE_XSIZE_HIMETRIC hmWidth; OLE_YSIZE_HIMETRIC hmHeight; pPic->get_Width(&hmWidth); pPic->get_Height(&hmHeight); double fX,fY; fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->Ge tDeviceCaps(HORZSIZE)*100.0); fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->G etDeviceCaps(VERTSIZE)*100.0); if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-h mHeight,NULL))) AfxMessageBox("Failed To Render The picture!"); pPic->Release(); } else AfxMessageBox("Error Loading Picture From Stream!"); } } } else AfxMessageBox("Can"t Open Image File!"); } 或者装一个platform sdk,然后用GDI+ LZ是在图像处理方面的吗?我也发现了相同的问题把图片用WINDOWS里面的画板打开点击另存为 可以选择保存的格式保存256色BMP格式 可以加载位图。我尝试过不知道对你的问题有无帮助!! 不错,关注ing!现在CSDN的收藏没有以前方便了,是用啥子“天天网摘”,只好用这种方式来留个记号了。 IPicture *pPic;CFileStatus fstatus;CFile file;LONG cb;if (file.Open("c:/test.jpg",CFile::modeRead)&&file.GetStatus("c:/test.jpg",fstatus)&&((cb = fstatus.m_size) != -1)){HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);LPVOID pvData = NULL;if (hGlobal != NULL){if ((pvData = GlobalLock(hGlobal)) != NULL){file.ReadHuge(pvData, cb);GlobalUnlock(hGlobal);CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))这一大段可以简化成OleLoadPicturePath //用gdi+ Image image(L"a.jpg"); CLSID clsid; GetEncoderClsid(L"image/bmp", &clsid); image.Save(L"b.bmp", &clsid);//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} C++对按钮的操作。。急............. 请问究进什么是兼容设备上下文 帖子怎么没人回啊,高手近来帮忙啊,跪求了 5555555555555555 调用SetWindowLong为什么失败? 如何隐式调用用c写成的dll文件。 如何在外部关闭对话框 请问谁做过类似VC里的界面编辑器的软件 ★局域网内不能上QQ又很想上QQ的人进来看!!!!!! atl组件中是否可以自定义线程 关闭计算机是用哪个函数? DirectX[sdk 中DirectPlay带voice交互的例子播放后声音效果不好,什么原因?如何解决?] 有谁给我讲解一下 锐化 的算法 , 谢谢....
msdn里面SimpleImage例子,楼主可以看看
IStream *pStm; CFileStatus fstatus;
CFile file;
LONG cb; if (file.Open("c:/test.jpg",CFile::modeRead)&&file.GetStatus("c:/test.jpg",
fstatus)&&
((cb = fstatus.m_size) != -1))
{
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);
LPVOID pvData = NULL;
if (hGlobal != NULL)
{
if ((pvData = GlobalLock(hGlobal)) != NULL)
{
file.ReadHuge(pvData, cb);
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*
)&pPic)))
{
OLE_XSIZE_HIMETRIC hmWidth;
OLE_YSIZE_HIMETRIC hmHeight; pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight); double fX,fY;
fX = (double)pDC->GetDeviceCaps(HORZRES)*(double)hmWidth/((double)pDC->Ge
tDeviceCaps(HORZSIZE)*100.0);
fY = (double)pDC->GetDeviceCaps(VERTRES)*(double)hmHeight/((double)pDC->G
etDeviceCaps(VERTSIZE)*100.0);
if(FAILED(pPic->Render(*pDC,0,0,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-h
mHeight,NULL)))
AfxMessageBox("Failed To Render The picture!");
pPic->Release();
}
else
AfxMessageBox("Error Loading Picture From Stream!");
}
}
}
else
AfxMessageBox("Can"t Open Image File!");
}
我也发现了相同的问题
把图片用WINDOWS里面的画板打开
点击另存为 可以选择保存的格式
保存256色BMP格式 可以加载位图。
我尝试过
不知道对你的问题有无帮助!!
CFile file;
LONG cb;if (file.Open("c:/test.jpg",CFile::modeRead)&&file.GetStatus("c:/test.jpg",
fstatus)&&
((cb = fstatus.m_size) != -1))
{
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);
LPVOID pvData = NULL;
if (hGlobal != NULL)
{
if ((pvData = GlobalLock(hGlobal)) != NULL)
{
file.ReadHuge(pvData, cb);
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*
)&pPic)))
这一大段可以简化成OleLoadPicturePath
Image image(L"a.jpg");
CLSID clsid;
GetEncoderClsid(L"image/bmp", &clsid); image.Save(L"b.bmp", &clsid);//
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
}