谁有一个将jpg格式的文件转换为bmp格式文件的程序

grasshopperliu 2003-08-20 07:26:48

各位大虾:
我需要一个将jpg格式的文件转换为bmp格式文件的程序,
要原代码。谢了先
...全文
113 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bsbcn 2003-12-09
  • 打赏
  • 举报
回复
我也需要这方面的东西。,谢谢
bcpl 2003-08-21
  • 打赏
  • 举报
回复
下面的JpgToBmp函数可以实现,为清晰起见,去掉了所有错误处理,真正要用的话
要自己加上..

PBITMAPINFO CreateBitmapInfoStruct(HBITMAP hBmp)
{
BITMAP bmp;
PBITMAPINFO pbmi;
WORD cClrBits;

GetObject(hBmp, sizeof(BITMAP), (LPSTR)&bmp);

cClrBits = (WORD)(bmp.bmPlanes * bmp.bmBitsPixel);
if (cClrBits == 1)
cClrBits = 1;
else if (cClrBits <= 4)
cClrBits = 4;
else if (cClrBits <= 8)
cClrBits = 8;
else if (cClrBits <= 16)
cClrBits = 16;
else if (cClrBits <= 24)
cClrBits = 24;
else cClrBits = 32;

if (cClrBits != 24)
pbmi = (PBITMAPINFO) LocalAlloc(LPTR, sizeof(BITMAPINFOHEADER) +
sizeof(RGBQUAD) * (1<< cClrBits));
else
pbmi = (PBITMAPINFO) LocalAlloc(LPTR, sizeof(BITMAPINFOHEADER));

pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
pbmi->bmiHeader.biWidth = bmp.bmWidth;
pbmi->bmiHeader.biHeight = bmp.bmHeight;
pbmi->bmiHeader.biPlanes = bmp.bmPlanes;
pbmi->bmiHeader.biBitCount = bmp.bmBitsPixel;
if (cClrBits < 24)
pbmi->bmiHeader.biClrUsed = (1<<cClrBits);

pbmi->bmiHeader.biCompression = BI_RGB;

pbmi->bmiHeader.biSizeImage = ((pbmi->bmiHeader.biWidth * cClrBits +31)
& ~31) /8 * pbmi->bmiHeader.biHeight;
pbmi->bmiHeader.biClrImportant = 0;
return pbmi;
}

void CreateBMPFile(LPCTSTR pszFile, PBITMAPINFO pbi,
HBITMAP hBMP, HDC hDC)
{
HANDLE hf;
BITMAPFILEHEADER hdr;
PBITMAPINFOHEADER pbih;
LPBYTE lpBits;
DWORD dwTotal;
DWORD cb;
BYTE *hp;
DWORD dwTmp;

pbih = (PBITMAPINFOHEADER) pbi;
lpBits = (LPBYTE) GlobalAlloc(GMEM_FIXED, pbih->biSizeImage);

GetDIBits(hDC, hBMP, 0, (WORD) pbih->biHeight, lpBits, pbi, DIB_RGB_COLORS);

hf = CreateFile(pszFile, GENERIC_READ | GENERIC_WRITE, (DWORD) 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, (HANDLE) NULL);
hdr.bfType = 0x4d42; // 0x42 = "B" 0x4d = "M"
hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + pbih->biSize +
pbih->biClrUsed * sizeof(RGBQUAD) + pbih->biSizeImage);
hdr.bfReserved1 = 0;
hdr.bfReserved2 = 0;

hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbih->biSize +
pbih->biClrUsed * sizeof (RGBQUAD);

WriteFile(hf, (LPVOID) &hdr, sizeof(BITMAPFILEHEADER), (LPDWORD) &dwTmp, NULL);

WriteFile(hf, (LPVOID) pbih, sizeof(BITMAPINFOHEADER)
+ pbih->biClrUsed * sizeof (RGBQUAD), (LPDWORD) &dwTmp, ( NULL));

dwTotal = cb = pbih->biSizeImage;
hp = lpBits;
WriteFile(hf, (LPSTR) hp, (int) cb, (LPDWORD) &dwTmp,NULL);

CloseHandle(hf);
GlobalFree((HGLOBAL)lpBits);
}

void JpgToBmp(LPCTSTR lpszJpgFile, LPCTSTR lpszBmpFile)
{
HANDLE hFile = CreateFile(lpszJpgFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
DWORD dwFileSize = GetFileSize(hFile, NULL);
LPVOID pvData = NULL;
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
pvData = GlobalLock(hGlobal);
DWORD dwBytesRead = 0;
BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL);
GlobalUnlock(hGlobal);
CloseHandle(hFile);
LPSTREAM pstm = NULL;
HRESULT hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm);
LPPICTURE pPicture;
hr = ::OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&pPicture);
pstm->Release();

HDC hdc = ::CreateCompatibleDC(NULL); //::GetDC(m_hWnd);
HDC hdcOld;
HBITMAP hBitmap;
HBITMAP hOldBitmap;

pPicture->SelectPicture(hdc, &hdcOld, (OLE_HANDLE*)&hOldBitmap);
pPicture->get_Handle((OLE_HANDLE*)&hBitmap);

PBITMAPINFO pbi = CreateBitmapInfoStruct(hBitmap);
CreateBMPFile(lpszBmpFile, pbi, hBitmap, hdc);

pPicture->SelectPicture(hdcOld, NULL, NULL);
::SelectObject(hdc, hOldBitmap);
::DeleteDC(hdc);
}
shines77 2003-08-20
  • 打赏
  • 举报
回复
http://www.codeproject.com/bitmap/cximage.asp
shines77 2003-08-20
  • 打赏
  • 举报
回复
CxImage类或者Intel的IJL库
xtmzl 2003-08-20
  • 打赏
  • 举报
回复
网上有这方面的控件。
howtotell 2003-08-20
  • 打赏
  • 举报
回复
一个迂回的方法:把jpg显示到窗口,然后再截图。jpg和截图的代码csdn以前的帖子都有。如果找不到可以发信息给我。
超级转换秀11.8印心豪华破解版 《超级转换秀》是梦幻科技品牌旗下优秀力作。超级转换秀是国内首个集成视频转换、音频转换、CD抓轨、音视频混合转换、音视频切割/驳接转换、叠加视频水印、叠加滚动字幕/个性文字/图片等于一体的优秀影音转换工具。其内置国际一流的解压技术,转换质量一流,同时支持各种CPU的MMX,3D Now!,SSE1/2/3/4以及最新多核技术等指令系统的全面优化,让您拥有更快速的转换速度。其支持的功能之多,几乎可以满足您所有的转换要求并成为您的转换工具首选。其功能要点如下: 1.支持将CD音乐直接转换为WAV/MP3/WMA/OGG等数字音乐,并支持按用户喜好选择各种转换参数,支持批量转换处理,支持多光驱。 2.支持WAV,MP3,WMA,AAC,M4A,OGG,APE,AC3,RMA等格式的音频,同时支持抓取AVI,VCD,SVCD,DVD,MPG,WMV,ASF,RM,RMVB,FLV,F4V,MOV,QT,MP4,MPEG4,3GP,3G2,MKV,TS,TP,MTS,M2TS,MOD,TOD,SDP,YUV等视频文件的音频并转换,以上所有格式都可转换为WAV/MP3/WMA/AAC/M4A/OGG/APE等音频格式,音频转换均支持按您的喜好来设置相关转换参数,并支持批量转换处理。 3.支持将各主流视频AVI/VCD/SVCD/DVD/MPG/WMV/ASF/RM/RMVB/FLV/F4V/MOV/QT/MP4/MPEG4/3GP/3G2/MKV/TS/TP/MTS/M2TS/MOD/TOD/SDP/YUV等转换为AVI/MPEG4/VCD/SVCD/DVD/MPG/WMV/RM/RMVB/FLV/MOV/GIF闪图等格式。AVI格式允许任您选择十多种系统音频和视频压缩器,包括Divx/Xvid等MPEG4视频压缩器;MPG格式支持应用于家庭影碟机的VCD/SVCD/DVD之NTSC/PAL制式的转换或自定义MPEG1/MPEG2格式;WMV格式允许用户选择各种适应电脑观看、各种网络在线观看、手机或掌上设备观看等不同质量级别的转换画面并允许您选择自己定制的WMV转换参数文件(包括支持VC-1高清WMV编码);RM/RMVB格式支持各种网络带宽应用、手机移动设备应用等不同质量级别视频的导出。视频转换还支持不同视频文件和音频文件的混合合成转换,切割转换、合并转换等。允许为各导出格式选择屏幕缩放方法,并支持批量转换处理,甚至还可以允许您在最终视频的具体位置叠加自己半透明的个性文字、图片(水印)或滚动字幕视频效果! ● V11.8首次在音、视频转换中允许重复修改截取的转换时间段的起点和终点参数,让随时修改参数或切割修改更方便,不必由于时间段设置失误而每次都重新从头设置。 ● V11.8首次在音频转换中加入了激动人心的"专用混音器"功能,让混音成为可能!混音器支持多格式导入混音并支持将混音结果导出保存为音频文件,允许对每个输入音频源进行单独的音量混音设置 ● V11.8针对RM/RMVB视频转换中出现的错误和异常进行了更好的兼容,对新旧解码器进行了更好的支持(注:RM/RMVB新旧双解码内核只供正式用户此双解码内核)。 ● 解决了在批量处理过程中,由于某视频文件兼容性错误而导致全部转换意外中止的问题,针对批量转换加入了容错系统,确保转换顺利进行。同时解决了在批量处理中无法自动添加识别一些音频或视频格式的错误。 ● 解决了在音视频转换或切割同一视频或音频文件转换中,目标文件名由于自动命名算法不完善导致覆盖之前生成的文件的重大错误,使得在切割或批量处理中更安全稳定。 ● 解决了CD转换参数设置无法保存的错误。 ● 对整体界面进行了总体改进和提高。 ● CD抓轨功能上全面彻底更换内核,新的内核免除ASPI的安装,免除了再重启系统的麻烦。再次全新CD转换内核异常强大:支持IDE/USB/SCSI/FireWire等几乎所有光驱的全面抓轨高性能转换;可直接从CD转为WAV/MP3/WMA/OGG等诸多格式,比原来支持格式更多,同时各种格式支持更详细的参数设置,由于增加了直接转换,让音质绝对一流;新的CD转换内核还采用了并发大面积光盘抓轨、集中转换、智能纠错等先进技术,使得转换速度达到目前CD转换真正最快最高水平! ● 在整个程序中引入了核心文件自动保护技术,并加强了安装程序和软件防干扰性能,确保从安装到软件的长久性运行的稳定和安全。 ● 对CD预览功能进行了全面加强,支持直接数字高速读取播放(免插音频线),支持数字频谱仪显示等人性化功能。 ● WMV视频导出功能增加了PDA常用的WMV 16:9宽屏幕转换配置文件,现在只需从程序安装路径的WMV配置文件保存目录里直接选取配置文件即可,免除自己设定的烦恼。 ● 全方位错误大修正:修正了修改按钮的显示错误;修正了光驱中放置空刻录碟导致程序启动失败的错误;修正了导出路径自动保存失效的错误。同时在程序界面上进行了彻底的改进和优化! ● 允许对转换列表中的已添加项目进行参数的重新编辑,大大节省了您的转换和操作效率。 ● 对输出文件夹进行自动记忆,免去每次都得指定的麻烦,操作更方便。 ● 对音频转换进行彻底的内核变更,解决了转换过程中由于文件名等问题导致某些文件无法顺利转换的诸多不稳定问题。 ● 在视频转换中增加允许自定义导出MPEG1或MPEG2的MPG视频。 ● 在音频转换中增加允许导出超优质AAC格式文件,支持比特率可高达448kbps!(32-448kbps) ● 支持更多实用的导出格式:加入了MPG自定义格式支持,允许用户自定义设置MPG高度、宽度和视频比特率。 ● 修正了部分DVD转换参数识别异常导致的转换失败问题。 ● 修正了AVI导出时,无法判别视频宽度和高度以及帧速率的问题。 ● 修正了部分格式批量选取时导致的参数错误而引起的转换失败问题。 ● 加强了音频WMA和视频WMV的自动设置功能并修正了相关错误。 ● 修正了转换列表无法多选删除文件的错误,让操作更方便。 ● 加入了对MP4/3GP/SDP/YUV等MP4视频或手机3GPP视频格式的支持。 ● 重大修正了注册用户在转换过程中被提示无法批量处理的错误。 ● 加入了真正意义上完全由用户自定义的透明LOGO个性图标制作支持,支持格式多达:JPG/BMP/GIF/TIF/PNG等主流格式。 ● 修正了自定义透明个性图标无法兼容部分制图工具制作的图片的错误。 ● 修正了自定义透明个性图标无法更换的错误。 ● 加入了一次性即可大批量添加目录下所有音频、视频文件的功能。 ● 增加了音频、视频切割功能并允许视频文件的音轨、视频轨的混合切割。 ● 其他相关错误的修改和功能的完善。

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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