jpg转bmp

xuanfeng007 2008-12-19 10:37:41
各位有没有jpg转bmp的程序,最好附有代码的,新手,谢谢各位了。
网上看了下,都是些简单介绍,我想能不能有个demo程序,参考一下。
如果方便的话也可以发到我邮箱:xuanfeng009@sina.com
...全文
3338 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tinary3v0 2008-12-23
  • 打赏
  • 举报
回复
支持使用GDI+
下载一个VS2003的gdi+代码 去看看就知道gdi+怎么做的了 ,改到VC6.0下也很容易。
http://download.csdn.net/source/719406
Chendy1985 2008-12-23
  • 打赏
  • 举报
回复
gdi+很容易吧
yc_8301 2008-12-23
  • 打赏
  • 举报
回复
电驴源代码中有一段是处理 图片转换的,可是我不太记得是不是使用的CXImage 类。
LZ可以参照一下。。
n_yHHy_n 2008-12-22
  • 打赏
  • 举报
回复
BOOL CPicture::SaveAsBitmap(CString sFilePathName)
//=============================================================================
{
BOOL bResult = FALSE;
ILockBytes *Buffer = 0;
IStorage *pStorage = 0;
IStream *FileStream = 0;
BYTE *BufferBytes;
STATSTG BytesStatistics;
DWORD OutData;
long OutStream;
CFile BitmapFile; CFileException e;
double SkipFloat = 0;
DWORD ByteSkip = 0;
_ULARGE_INTEGER RealData;

CreateILockBytesOnHGlobal(NULL, TRUE, &Buffer); // Create ILockBytes Buffer

HRESULT hr = ::StgCreateDocfileOnILockBytes(Buffer,
STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_READWRITE, 0, &pStorage);

hr = pStorage->CreateStream(L"PICTURE",
STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_READWRITE, 0, 0, &FileStream);

m_IPicture->SaveAsFile(FileStream, TRUE, &OutStream); // Copy Data Stream
FileStream->Release();
pStorage->Release();
Buffer->Flush();

// Get Statistics For Final Size Of Byte Array
Buffer->Stat(&BytesStatistics, STATFLAG_NONAME);

// Cut UnNeeded Data Coming From SaveAsFile() (Leave Only "Pure" Picture Data)
SkipFloat = (double(OutStream) / 512); // Must Be In a 512 Blocks...
if(SkipFloat > DWORD(SkipFloat)) ByteSkip = (DWORD)SkipFloat + 1;
else ByteSkip = (DWORD)SkipFloat;
ByteSkip = ByteSkip * 512; // Must Be In a 512 Blocks...

// Find Difference Between The Two Values
ByteSkip = (DWORD)(BytesStatistics.cbSize.QuadPart - ByteSkip);

// Allocate Only The "Pure" Picture Data
RealData.LowPart = 0;
RealData.HighPart = 0;
RealData.QuadPart = ByteSkip;
BufferBytes = (BYTE*)malloc(OutStream);
if(BufferBytes == NULL)
{
Buffer->Release();
HWND hWnd = AfxGetApp()->GetMainWnd()->m_hWnd;
MessageBoxEx(hWnd, "Can not allocate enough memory\t", ERROR_TITLE, MB_OK | MB_ICONSTOP, LANG_ENGLISH);
}

Buffer->ReadAt(RealData, BufferBytes, OutStream, &OutData);

if(BitmapFile.Open(sFilePathName, CFile::typeBinary | CFile::modeCreate | CFile::modeWrite, &e))
{
BitmapFile.Write(BufferBytes, OutData);
BitmapFile.Close();
bResult = TRUE;
}
else // Write File Failed...
{
TCHAR szCause[255];
e.GetErrorMessage(szCause, 255, NULL);
HWND hWnd = AfxGetApp()->GetMainWnd()->m_hWnd;
MessageBoxEx(hWnd, szCause, ERROR_TITLE, MB_OK | MB_ICONSTOP, LANG_ENGLISH);
bResult = FALSE;
}

Buffer->Release();
free(BufferBytes);

return(bResult);
}
wutaihua 2008-12-22
  • 打赏
  • 举报
回复
学习
wsjtianyu 2008-12-22
  • 打赏
  • 举报
回复
同意CxImage,一个保存函数即可实现。
路人乙2019 2008-12-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 zhucde 的回复:]
如楼上, CxImage完全开源的图像库,
支持常用图片的载入和转换, 使用起来十分方便
[/Quote].
ivan_08 2008-12-22
  • 打赏
  • 举报
回复
bucuo
wawawo20 2008-12-22
  • 打赏
  • 举报
回复
如果要求在内存中修改,请参考:
http://www.vckbase.com/document/viewdoc/?id=1177
wawawo20 2008-12-22
  • 打赏
  • 举报
回复
delete []wCH;
delete []wCH1;
wCH = NULL;
wCH1 = NULL;
此处应该改成这样!
wawawo20 2008-12-22
  • 打赏
  • 举报
回复
介绍一种通过GDI+实现类型转换的办法:
首先,添加引用:
#include <gdiplus.h>
using namespace Gdiplus;

再定义对象:
GdiplusStartupInput gdiplusStartupInput;
ULONG_PTR gdiplusToken;

CMyImage::CMyImage(void)
{

GdiplusStartup(&gdiplusToken,&gdiplusStartupInput, NULL);
}

CMyImage::~CMyImage(void)
{
GdiplusShutdown(gdiplusToken);
}

接着通过两步即可实现类型转换:

//将图片信息转换成BMP格式保存
BOOL CMyImage::TranstToBMP(CString srcPath,CString destPath)
{


WCHAR* wCH = new WCHAR[srcPath.GetLength()];
wcscpy(wCH,srcPath.AllocSysString());

Image img(wCH);//这里的图片可以是其它格式
CLSID pngClsid;
GetImageCLSID(L"image/bmp", &pngClsid);//这里的图片可以是其它格式,此处转化为BMP格式

WCHAR* wCH1 = new WCHAR[destPath.GetLength()];
wcscpy(wCH1, destPath.AllocSysString());
img.Save(wCH1, &pngClsid, NULL);

delete wCH;
delete wCH1;
wCH = NULL;
wCH1 = NULL;


return TRUE;
}

/////////
BOOL CMyImage::GetImageCLSID(const WCHAR* format, CLSID* pCLSID)
{
UINT num = 0;
UINT size = 0;
ImageCodecInfo* pImageCodecInfo = NULL;
GetImageEncodersSize(&num, &size);
if(size == 0)
{
return FALSE;
}

pImageCodecInfo = (ImageCodecInfo *)malloc((size));
if(pImageCodecInfo == NULL)
return FALSE;
GetImageEncoders(num, size, pImageCodecInfo);
// Find for the support of format for image in the windows
for(UINT i = 0; i < num; ++i)
{
//MimeType: Depiction for the program image
if( wcscmp(pImageCodecInfo[i].MimeType, format) == 0)
{
*pCLSID = pImageCodecInfo[i].Clsid;
free(pImageCodecInfo);
return TRUE;
}
}
free(pImageCodecInfo);
return FALSE;
}

希望能帮到你!
luobonic 2008-12-21
  • 打赏
  • 举报
回复
photoshop+zlib
wgm001 2008-12-20
  • 打赏
  • 举报
回复
CXImage libjpeg 都可以.
exceed_me 2008-12-20
  • 打赏
  • 举报
回复
呵呵,前段时间为这个东西头疼了不少

个人感觉 CxImage 速度过慢,如果不是用在边转换边发送的话,还可以....
up_down 2008-12-19
  • 打赏
  • 举报
回复
Cximage,非常好的东东,作者还在不停更新。
「已注销」 2008-12-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 brightxu 的回复:]
不好用,我用过!只能转换为24位的位图,别的就没有办法了!还的用photoshop等处理为8,16为的位图,如果你需要的话!
如果需要你可以到csdn里下载:http://dl3.csdn.net/fd.php?i=63376550546085&s=e6e0f96c2a670ca850df20dbd3da5427
努力!
[/Quote]
不是吧,支持24,16,8,2,1位的位图啊
ilovedrv 2008-12-19
  • 打赏
  • 举报
回复
用freeimage,下面两个都可参考

(1)FreeImage 测试程序,程序比较简单,实现了jpg到位图的转换示例,以及各种图片文件的打开

http://download.csdn.net/source/881640

你直接看【jpg2bmp】菜单实现就可以了,就两个函数的调用,很简单


(2)Load, show and convert miscellaneous file-formats using freeimage

http://www.codeproject.com/KB/graphics/graphicsuite.aspx
brightxu 2008-12-19
  • 打赏
  • 举报
回复
不好用,我用过!只能转换为24位的位图,别的就没有办法了!还的用photoshop等处理为8,16为的位图,如果你需要的话!
如果需要你可以到csdn里下载:http://dl3.csdn.net/fd.php?i=63376550546085&s=e6e0f96c2a670ca850df20dbd3da5427
努力!
zhucde 2008-12-19
  • 打赏
  • 举报
回复
如楼上, CxImage完全开源的图像库,
支持常用图片的载入和转换, 使用起来十分方便
梧桐168 2008-12-19
  • 打赏
  • 举报
回复
CXImage
http://www.yuanma.org/data/2007/0725/article_2772.htm
这样的代码网上搜下很多的
加载更多回复(3)

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧