我 把扫描仪扫到的一些图片保存到本地之后读取,因为有很多所以 加了一 FlowLayoutPanel 控件 2013-06-18 13:51:10 参数无效。 在 System.Drawing.Image.get_Width() 在 System.Drawing.Image.get_Size() 在 System.Windows.Forms.PictureBox.ImageRectangleFromSizeMode(PictureBoxSizeMode mode) 在 System.Windows.Forms.PictureBox.OnPaint(PaintEventArgs pe) 在 System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs) 在 System.Windows.Forms.Control.WmPaint(Message& m) 在 System.Windows.Forms.Control.WndProc(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 在 System.Windows.Forms.Application.Run(Form mainForm) 在 GreatHandFFs.UI.Program.Main() 位置 C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\GreatHandFFs.root\GreatHandFFs\GreatHandFFs.UI\Program.cs:行号 51 求大神 指点 一下 ,异常的source 是 System.Drawing |
|
30分 |
肯定是跟读取图片信息有关,你好好跳是不,一步步旋转,看看什么条件下报错
|
15分 |
认真检查每一步,肯定有细节问题!
|
20分 |
请检查看看,如果是不是已经image.Dispose();释放了,如果释放了,就把//image.Dispose();这个注释掉看看。
|
恩,但是如果 我 不释放的话 比如说 ,我显示大小图片的pic是处于在 旋转的情况下的话,我在点击 flp控件上的pic的话他还是回报 参数无效, |
|
10分 |
建议贴出来你旋转的代码,以及出错的代码。
从错误信息上只能看出来是在获取对象宽度的时候出错了! |
#region 图片旋转函数 /// <summary> /// 以逆时针为方向对图像进行旋转 /// </summary> /// <param name="b">位图流</param> /// <param name="angle">旋转角度[0,360](前台给的)</param> /// <returns></returns> public static Image RotateImg(Image b, int angle) { angle = angle % 360; //弧度转换 double radian = angle * Math.PI / 180.0; double cos = Math.Cos(radian); double sin = Math.Sin(radian); //原图的宽和高 int w = b.Width; int h = b.Height; int W = (int)(Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin))); int H = (int)(Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos))); //目标位图 Bitmap dsImage = new Bitmap(W, H); System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dsImage); g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //计算偏移量 Point Offset = new Point((W - w) / 2, (H - h) / 2); //构造图像显示区域:让图像的中心与窗口的中心点一致 Rectangle rect = new Rectangle(Offset.X, Offset.Y, w, h); Point center = new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2); g.TranslateTransform(center.X, center.Y); g.RotateTransform(360 - angle); //恢复图像在水平和垂直方向的平移 g.TranslateTransform(-center.X, -center.Y); g.DrawImage(b, rect); //重至绘图的所有变换 g.ResetTransform(); g.Save(); g.Dispose(); //保存旋转后的图片 b.Dispose(); //dsImage.Save("FocusPoint.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); return dsImage; } 以上旋转代码 private void pb_Click(object sender, EventArgs e) { try { if (pbBigImage.Image != null&&pbBigImage!=null) { pbBigImage.Image.Dispose(); pbBigImage.Dispose(); } PictureBox pb = sender as PictureBox; picfs = 1; pbBigImage.Tag = pb.Tag; pbBigImage.SizeMode = PictureBoxSizeMode.Zoom; pbBigImage.Size = new Size(368, 441); picHeight = pbBigImage.Size.Height; picWidth = pbBigImage.Size.Width; pbBigImage.Image = pb.Image; } catch (Exception ) { } } 以上点击panel里的pic 给 显示图片大小的pic赋值 |
|
25分 |
你可以这样操作看看,等你把所以的事情都做完后,在一一的Dispose()释放资源。没有完成的时候,可以先别急这Dispose(),看看还会不会出现这种问题。
|
您说的是 什么意思啊 ,我 怎么知道 用户在什么时候点击 旋转 和 点击 其他啊 |
|
如果说,你的函数是分开的话,应该不会出现这种问题。应该是Dispose()或者其它资源释放了照成的原因。再找找吧
|
|
就是图片旋转方法 里的 dispose()方法造成的,我 如果 不释放 那个方法的dispose() 会有什么 影响吗? |
|
b.Dispose() 是这句引起的? |
|
现在工具的强大,即使你不释放,它也有自己的回收机制,所以说,为什么现在程序员越来越笨就是这样。如果能自己释放是最好不过的。 |
|
我也遇到相同的问题,通过以下两个步骤解决
1、在方法体内部使用克隆后的Image,不再访问源Image 2、在方法体内部外括lock(…){ … } |