参数无效 问题

glacier003 2009-08-27 02:12:22

string tempfilename = tempFolder + Guid.NewGuid().ToString() + ".jpg";//文件名
Image img = EditImage.Breviary(pic.Image, pic.Width, pic.Height);//生成缩略图,pic为PictureBox的Name
img.Save(tempfilename);//把缩略图保存到磁盘
pic.Image = img;
pic.ImageLocation = tempfilename;
img.Dispose();
GC.Collect();
//下面为加水印方法
EditImage.PicWaterMark(tempSrcImgPath, pic.Image, tempSavImgPath, pic.Location.X, pic.Location.Y);


我用上面方法,先把一个图片生成缩略图后,再用缩略图作为水印加到另一个图片上,这样执行都没问题,但是再执行过去之后,会在
Application.Run(new MainForm());
处抛异常 参数无效。

但是,如果不生成缩略图,直接把PictureBox里的图片以水印方式加到另一个图片上,就不会有异常,如下代码所示

//直接用pic的Image作为水印,则不出问题
EditImage.PicWaterMark(tempSrcImgPath, pic.Image, tempSavImgPath, pic.Location.X, pic.Location.Y);


请高手指点,为什么生成缩略图后再加水印,会抛 参数无效 的异常呢?

...全文
655 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
do2001 2009-10-25
  • 打赏
  • 举报
回复
顶,很想知道
glacier003 2009-08-27
  • 打赏
  • 举报
回复
cja03
爱死你了
这才是我想要的效果
龙宜坡 2009-08-27
  • 打赏
  • 举报
回复
img.Dispose(); //这一步会将pic.Image也一同销毁的,所以你后面用到pic.Image是null,就会提示参数错误了。

应该是了!
cja03 2009-08-27
  • 打赏
  • 举报
回复
EditImage.PicWaterMark(tempSrcImgPath, pic.Image, tempSavImgPath, pic.Location.X, pic.Location.Y);

将 pic.Image 对象转为 Bitmap类型,再转回Image类型就行了。
glacier003 2009-08-27
  • 打赏
  • 举报
回复
继续等高手
yudi010 2009-08-27
  • 打赏
  • 举报
回复
估计问题不是这里的
全部代码贴上来?
glacier003 2009-08-27
  • 打赏
  • 举报
回复
高手高手?
glacier003 2009-08-27
  • 打赏
  • 举报
回复
xzq 老大,这段代码运行没问题,缩略图、水印 都能正常生成,就是按钮点击事件完成后,会在 Application.Run(new MainForm()); 处抛异常!
xzq686 2009-08-27
  • 打赏
  • 举报
回复
能调试不?哪个参数无效?

直接在pictureBox中的图片就可以..
在程序中给pictureBox附值不行?

EditImage.PicWaterMark的第二个参数要求不是Image对象吗?
glacier003 2009-08-27
  • 打赏
  • 举报
回复

string tempfilename = tempFolder + Guid.NewGuid().ToString() + ".jpg";
Image img = EditImage.Breviary(pic.Image, pic.Width, pic.Height);
img.Save(tempfilename);
img.Dispose();
GC.Collect();

//重新 new 一个Image,一样的错误
EditImage.PicWaterMark(tempSrcImgPath, Image.FromFile(tempfilename), tempSavImgPath, pic.Location.X, pic.Location.Y);

这样的代码同样的错误
glacier003 2009-08-27
  • 打赏
  • 举报
回复
如果不难,我也不跑这么老远来CSDN问了,呵呵
lovelan1748 2009-08-27
  • 打赏
  • 举报
回复
看着晕,能接分不
dancingbit 2009-08-27
  • 打赏
  • 举报
回复
难道是生成的缩略图有问题?
dancingbit 2009-08-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 glacier003 的回复:]
加完水印的图片都存到本地了,按钮的点击时间都执行完之后,才在 Application.Run 处抛的异常
[/Quote]
这个不能说明什么问题,发起销毁,并不就会立刻销毁,尤其是内存中已经存在的数据。

[Quote=引用 11 楼 glacier003 的回复:]
img.Dispose();
GC.Collect();
这个 去掉不去掉 都是一样的异常
[/Quote]
我不得不说,如果这是真的,真的很难解释。
glacier003 2009-08-27
  • 打赏
  • 举报
回复
img.Dispose();
GC.Collect();
这个 去掉不去掉 都是一样的异常
glacier003 2009-08-27
  • 打赏
  • 举报
回复
加完水印的图片都存到本地了,按钮的点击时间都执行完之后,才在 Application.Run 处抛的异常
dancingbit 2009-08-27
  • 打赏
  • 举报
回复
水印能正常生成的话,接下来怎么又会出异常?

要证实是不是Image被销毁造成的问题,很简单,把销毁资源的那句去掉马上就能看到了。
glacier003 2009-08-27
  • 打赏
  • 举报
回复
问题是缩略图和水印都能正常生成,也不报错,7# 的我试过了,不好使,能想到的方法我都试过了
xzq686 2009-08-27
  • 打赏
  • 举报
回复
虽然你把生成图片的路径给了PictureBox
但内存中其实没有你生成的缩略图..
要么你新建一个图片对象来重新加载生成的缩略图

string tempfilename = tempFolder + Guid.NewGuid().ToString() + ".jpg";//文件名
Image img = EditImage.Breviary(pic.Image, pic.Width, pic.Height);//生成缩略图,pic为PictureBox的Name
img.Save(tempfilename);//把缩略图保存到磁盘
img.Dispose();
GC.Collect();
//这里改下..再用Image对象装入..然后用新的image去加水印
Image image = System.Drawing.Image.FromFile(tempfilename);
//pic.Image = img;
//pic.ImageLocation = tempfilename;

//下面为加水印方法....pic.Location.X你适当的改一下..
EditImage.PicWaterMark(tempSrcImgPath, image, tempSavImgPath, pic.Location.X, pic.Location.Y);


lovvver 2009-08-27
  • 打赏
  • 举报
回复
string tempfilename = tempFolder + Guid.NewGuid().ToString() + ".jpg";//文件名
Image img = EditImage.Breviary(pic.Image, pic.Width, pic.Height);//生成缩略图,pic为PictureBox的Name
img.Save(tempfilename);//把缩略图保存到磁盘
pic.Image = img;
pic.ImageLocation = tempfilename;
img.Dispose(); //这一步会将pic.Image也一同销毁的,所以你后面用到pic.Image是null,就会提示参数错误了。
GC.Collect();
//下面为加水印方法
EditImage.PicWaterMark(tempSrcImgPath, pic.Image, tempSavImgPath, pic.Location.X, pic.Location.Y);
加载更多回复(5)

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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