大家帮忙给看看这段实现jpg图象到 bmp图转换的代码有什么错误的?

myadfm 2006-12-07 03:30:59
编译调试都没有问题,在运行时出错,
void CDlgDlg::On_Btnopen()
{
// TODO: Add your control notification handler code here
CFileDialog dlg(TRUE,"jpg",NULL,OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,"Jpg File(*.jpg)|*.jpg||");
if(dlg.DoModal()==IDOK){
m_StrJpg = dlg.GetPathName();
UpdateData(FALSE);
}
}

void CDlgDlg::On_Btnsave()
{
// TODO: Add your control notification handler code here
CFileDialog dlg(FALSE,"bmp",NULL,OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,"Bmp File(*.bmp)|*.bmp||");
if(dlg.DoModal()==IDOK){
m_StrBmp = dlg.GetPathName();
UpdateData(FALSE);
}
}

typedef bool(__stdcall CHANGE)(LPCSTR,LPCSTR,int iColorBit);

void CDlgDlg::On_Btnchange()
{
// TODO: Add your control notification handler code here

HINSTANCE hInst = ::LoadLibrary("d:\\JpgVsbmp.dll");
if( hInst == NULL ) //PXSTR //LPCSTR
{
AfxMessageBox("缺少JpgVSbmp.dll文件!");
return;
}

//LPCSTR fileName = "D:\\TEST.BMP";
//LPCSTR fileName1 = "D:\\72_22647.jpg";
CHANGE* pFunc = (CHANGE *)::GetProcAddress(hInst,"JpgToBmp");
pFunc(m_StrJpg,m_StrBmp,24);
m_StrBmp.ReleaseBuffer();
m_StrJpg.ReleaseBuffer();
::FreeLibrary(hInst);
}


错误为:
Unhandled exception at 0x1002a729 in Dlg.exe: 0xC0000005: Access violation reading location 0x00000000

该怎么办?????
...全文
105 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
myadfm 2006-12-07
  • 打赏
  • 举报
回复
我是想尝试运用JpgVsbmp.dll,参考的是:
http://blog.csdn.net/lbird/archive/2006/05/12/726245.aspx
JpgVSbmp.dll里导出的下面两个函数可以实现BMP文件和JPG文件之间的互换,

BOOL JpgToBmp(LPCSTR lpJpgFileNameForIn, LPCSTR lpBmpFileNameForOut,int iColorBit=24)
lpJpgFileNameForIn : Bmp文件完整路径
lpBmpFileNameForOut : 输出的Bmp文件完整路径
iColorBit : 转换后Bmp图的颜色位数(1——2色,4——16色,8——256色,others——24位)


BOOL BmpToJpg(LPCSTR lpBmpFileNameForIn, LPCSTR lpJpgFileNameForOut,BOOL bColor, int nQuality)
lpBmpFileNameForIn : Bmp文件完整路径
lpJpgFileNameForOut : 输出的JPG文件完整路径
bColor : 是否保留彩色(True——保留,False——转为2色图)
nQuality : 图像质量(1~100,默认75,100为质量最高)


JpgVSbmp.dll里导出的下面这个函数可以装内存中的DIB保存成JPG格式文件
BOOL DIBToJpg(HDIB hDIB, LPCSTR lpJpgFileNameForOut,BOOL bColor, int nQuality)
bColor : 是否保留彩色(True——保留,False——转为2色图)
nQuality : 图像质量(1~100,默认75,100为质量最高)
注: HDIB 被声明为 HANDLE 。是GlobalAlloc的返回值,其中保存图像数据。其中法可以参考<MSDN>提供的dibapi.h(cpp)
lib文件下载单击此处。

可惜lib文件无法下载了!!:(
myadfm 2006-12-07
  • 打赏
  • 举报
回复
mynamelj(夏娃的诱惑)
请问您的博客地址??
谢谢!!
myadfm 2006-12-07
  • 打赏
  • 举报
回复
修改为下面的后:
typedef bool(__stdcall CHANGE)(char *,char *,int iColorBit);

void CDlgDlg::On_Btnchange()
{
// TODO: Add your control notification handler code here

HINSTANCE hInst = ::LoadLibrary("d:\\JpgVsbmp.dll");
if( hInst == NULL ) //PXSTR //LPCSTR
{
AfxMessageBox("缺少JpgVSbmp.dll文件!");
return;
}

//LPCSTR fileName = "D:\\TEST.BMP";
//LPCSTR fileName1 = "D:\\72_22647.jpg";
CHANGE* pFunc = (CHANGE *)::GetProcAddress(hInst,"JpgToBmp");
// pFunc(m_StrJpg,m_StrBmp,24);
pFunc(m_StrJpg.GetBuffer(256),m_StrBmp.GetBuffer(256),24);
m_StrBmp.ReleaseBuffer();
m_StrJpg.ReleaseBuffer();
::FreeLibrary(hInst);
}

错误为:

Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention
neosu 2006-12-07
  • 打赏
  • 举报
回复
按F5运行, 出错时选"重试", 会回到错误代码. 点开call stack找到你的代码. 就是那了.
mynamelj 2006-12-07
  • 打赏
  • 举报
回复
看偶的Blog中有
超星转换利器 FreePic2Pdf 和 Pdg2Pic 最新绿色版(pdg转换成pdf),包含Pdg2Pic和FreePic2Pdf两部分软件。 Pdg2Pic 功能: 将PDG文件转成像文件(包括TIFF、JPG、PNG),具有下列特色: 转换过程不占用系统剪贴板,因此在转换时,不影响用户在前台的正常工作。 在打开目录时自动对PDG文件进行格式统计,并报告结果。 可以自动将文件按封面、前言、目录、正文、附录的顺序排列,也可以手动调整。 提供预览功能,在转换前可以先浏览PDG像和PDG文件信息。 如果转换过程中出现错误,将给出错误日志,便于定位有问题的PDG文件。 PDG文件的扫描DPI自动转存入TIFF、PNG文件,便于在转换成PDF文件时指定页面大小。 如果检查发现PDG文件是纯正的JPG文件,将不进行任何转换,直接将PDG复制为JPG;黑白PDG文件转存为采用CCITT G4压缩的TIFF文件,以获取高压缩比;灰度/彩色PDG重新压缩为有损的JPG或采用JPEG压缩的TIFF文件,或无损压缩的PNG文件 ,或JPEG 2000(JP2)文件(质量系数为100%时,JPEG 2000为无损压缩,否则为有损压缩)。 与FreePic2Pdf配合,能够自动生成PDF多级书签;能够在PDF文件中自动生成三段页码:封面、版权页用大写英文字母,目录页用小写罗马字母,正文页用阿拉伯数字;能够将BookInfo.dat作为文本添加到PDF文件中,并用其中内容填写PDF的Document Properties,包括Title、Author、Subject、Keyword。 能够将PDG文件直接OCR成文本文件。OCR引擎为微软Office 2003所带的Microsoft Office Document Imaging (MODI)。OCR时自动跳过封面、书名、版权、目录页。 Pdg2Pic基于超星浏览器的Pdg2控件实现,因此运行时需要在本地机上先安装超星浏览器,或注册一个能用的Pdg2.dll。本软件对超星浏览器3.8的支持没有问题,其它版本的超星浏览器没有试过。 PDG文件是超星公司电子书的专有格式,需要用超星公司的专用浏览器才能阅读。本人无意对超星公司的版权进行任何形式的侵犯,也不希望任何人用本工具从事侵权活动。如果需要浏览PDG电子书,请通过购买点卡等方式,以合法的途径获得。本软件假定用户通过合法的手段获得PDG文件,只是由于希望能够在比超星浏览器更好、更方便的浏览器上阅读,并且不对转换出来的文件进行扩散的情况下,才需要将PDG文件转换像文件。 FreePic2Pdf 功能: 将像文件(包括TIFF、JPG、PNG、GIF、BMP、JPEG 2000)合并、转换成PDF文件的软件: 对有损/无损压缩的JPEG 2000、有损压缩的JPG文件及采用JPEG/OJPEG算法压缩的TIFF文件,直接将原始数据流嵌入PDF文件,避免因为重新压缩而造成像质量下降;对无损压缩的像文件,黑白像解码后压缩为JBig2(有损或无损)或CCITT G4,其它解码后压缩成ZIP数据流嵌入PDF文件。 支持多页TIFF和多帧(动画)GIF,每页或每帧算一幅像。 可以指定生成的PDF文件的页面大小(除A4、B5等,还支持国内常用的32开、16开、大32开)及页边距。如果不指定页面的纸张大小,可以指定页面的固定宽度(长度随像大小伸缩),避免连续阅读时因为页面宽度变来变去而影响阅读。 支持通过接口自动生成多级书签、分段页码、添加文本页、设置PDF的Document Properties。 接口文件可以用于新生成的PDF,也可以用于已有的PDF,包括往已有的PDF上加书签、从PDF取书签等。 软件基于开源代码实现,运行时不需要任何第三方软件或控件的支持。当然如果要浏览制作出来的PDF文件,必须安装Adobe PDF Reader等PDF阅读软件。 使用步骤: 第1步:我们要先用到的是Pdg2Pic,由于这个软件在使用是要用到超星的Pdg2控件,所以我们要先把超星中的Pdg2.dll文件复制到WINDOWS文件夹下的SYSTEM32文件夹中(放到其他的地方行不行我还没有试过)然后点开始---运行---输入regsvr32 pdg2.dll 注册完成之后就可以使用Pdg2Pic了。 软件已经用1、2、3、4表示了操作步骤:先点击“1、选择需转换的PDG文件所在文件夹:” 选择你要转换的PDG文件夹后,这时先不要急着点“开始转换”因为经过第一步的选择文件夹之后,第2步的“选择存放转换出来的文件的文件夹”也跟着默认的和需转换的PDG文件

16,547

社区成员

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

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

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