winfrom 中 GDI+ 中发生一般性错误。

时间:2022-02-07 01:00:21
string path = @"..\controlBMP\controlBMP"+a+".jpg";
            //MessageBox.Show(pictureBox1.ImageLocation.ToString());
            using (Bitmap bmp = new Bitmap(pictureBox1.Image))
            {
                pictureBox1.Image.Dispose();
                bmp.Save(@path, System.Drawing.Imaging.ImageFormat.Jpeg); //这里报错GDI+ 中发生一般性错误。
                bmp.Dispose();
            }

            //pictureBox1.Image.Save(path);
            //pictureBox1.Image.Dispose();
            BitmapImage bi= BITransformation(path);
            win.image1[win.imgNumber].Source = bi;
            win.fileName[win.imgNumber] = bi.UriSource.ToString();
            this.Close();
在线等,可加分,谢谢

9 个解决方案

#1


可能是那张图片本身的问题,有些图片是带索引颜色的,不能直接转位图,得画上去,但是会变小
大致下面几种
public static PixelFormat[] IndexedPixelFormats
        {
            get
            {
                return new PixelFormat[]
                {
                    PixelFormat.Undefined,
                    PixelFormat.DontCare,
                    PixelFormat.Format16bppArgb1555,
                    PixelFormat.Format1bppIndexed,
                    PixelFormat.Format4bppIndexed,
                    PixelFormat.Format8bppIndexed
                };
            }
        }

另外,GDI参数设置错误,或者图片超过10000像素直接处理都会报一般性错误

#3


引用 楼主 hanping8446 的回复:
string path = @"..\controlBMP\controlBMP"+a+".jpg";
            //MessageBox.Show(pictureBox1.ImageLocation.ToString());
            using (Bitmap bmp = new Bitmap(pictureBox1.Image))
            {
                pictureBox1.Image.Dispose();
                bmp.Save(@path, System.Drawing.Imaging.ImageFormat.Jpeg); //这里报错GDI+ 中发生一般性错误。
                bmp.Dispose();
            }

            //pictureBox1.Image.Save(path);
            //pictureBox1.Image.Dispose();
            BitmapImage bi= BITransformation(path);
            win.image1[win.imgNumber].Source = bi;
            win.fileName[win.imgNumber] = bi.UriSource.ToString();
            this.Close();
在线等,可加分,谢谢


引用 楼主 hanping8446 的回复:
string path = @"..\controlBMP\controlBMP"+a+".jpg";
            //MessageBox.Show(pictureBox1.ImageLocation.ToString());
            using (Bitmap bmp = new Bitmap(pictureBox1.Image))
            {
                pictureBox1.Image.Dispose();
                bmp.Save(@path, System.Drawing.Imaging.ImageFormat.Jpeg); //这里报错GDI+ 中发生一般性错误。
                bmp.Dispose();
            }

            //pictureBox1.Image.Save(path);
            //pictureBox1.Image.Dispose();
            BitmapImage bi= BITransformation(path);
            win.image1[win.imgNumber].Source = bi;
            win.fileName[win.imgNumber] = bi.UriSource.ToString();
            this.Close();
在线等,可加分,谢谢

我的代码问题是 第一次运行可以,但第二次调用这个方法时上面标注的地方就会报GDI+ 中发生一般性错误。

#4


引用 2 楼 Chinajiyong 的回复:
权限问题
http://bbs.csdn.net/topics/340250830

我的代码问题是 第一次运行可以,但第二次调用这个方法时上面标注的地方就会报GDI+ 中发生一般性错误。
权限问题的话,怎么赋给它权限呢

#5


直接 pictureBox1.Image.Save 不可以吗?干嘛绕个圈子?
再说 pictureBox1.Image.Dispose(); 已将资源释放了,再次执行怎么会对呢?

#6


using (Bitmap bmp = new Bitmap(pictureBox1.Image))
既然用了using, 这句就可以不要了bmp.Dispose();

#7


引用 4 楼 hanping8446 的回复:
Quote: 引用 2 楼 Chinajiyong 的回复:

权限问题
http://bbs.csdn.net/topics/340250830

我的代码问题是 第一次运行可以,但第二次调用这个方法时上面标注的地方就会报GDI+ 中发生一般性错误。
权限问题的话,怎么赋给它权限呢

因为不行,所以才试着释放一下

#8


引用 5 楼 xuzuning 的回复:
直接 pictureBox1.Image.Save 不可以吗?干嘛绕个圈子?
再说 pictureBox1.Image.Dispose(); 已将资源释放了,再次执行怎么会对呢?

因为不行,所以才试着释放一下

#9


引用 4 楼 hanping8446 的回复:
Quote: 引用 2 楼 Chinajiyong 的回复:

权限问题
http://bbs.csdn.net/topics/340250830

我的代码问题是 第一次运行可以,但第二次调用这个方法时上面标注的地方就会报GDI+ 中发生一般性错误。
权限问题的话,怎么赋给它权限呢

看看这篇文章  http://www.cnblogs.com/softidea/p/3253469.html

#1


可能是那张图片本身的问题,有些图片是带索引颜色的,不能直接转位图,得画上去,但是会变小
大致下面几种
public static PixelFormat[] IndexedPixelFormats
        {
            get
            {
                return new PixelFormat[]
                {
                    PixelFormat.Undefined,
                    PixelFormat.DontCare,
                    PixelFormat.Format16bppArgb1555,
                    PixelFormat.Format1bppIndexed,
                    PixelFormat.Format4bppIndexed,
                    PixelFormat.Format8bppIndexed
                };
            }
        }

另外,GDI参数设置错误,或者图片超过10000像素直接处理都会报一般性错误

#2


#3


引用 楼主 hanping8446 的回复:
string path = @"..\controlBMP\controlBMP"+a+".jpg";
            //MessageBox.Show(pictureBox1.ImageLocation.ToString());
            using (Bitmap bmp = new Bitmap(pictureBox1.Image))
            {
                pictureBox1.Image.Dispose();
                bmp.Save(@path, System.Drawing.Imaging.ImageFormat.Jpeg); //这里报错GDI+ 中发生一般性错误。
                bmp.Dispose();
            }

            //pictureBox1.Image.Save(path);
            //pictureBox1.Image.Dispose();
            BitmapImage bi= BITransformation(path);
            win.image1[win.imgNumber].Source = bi;
            win.fileName[win.imgNumber] = bi.UriSource.ToString();
            this.Close();
在线等,可加分,谢谢


引用 楼主 hanping8446 的回复:
string path = @"..\controlBMP\controlBMP"+a+".jpg";
            //MessageBox.Show(pictureBox1.ImageLocation.ToString());
            using (Bitmap bmp = new Bitmap(pictureBox1.Image))
            {
                pictureBox1.Image.Dispose();
                bmp.Save(@path, System.Drawing.Imaging.ImageFormat.Jpeg); //这里报错GDI+ 中发生一般性错误。
                bmp.Dispose();
            }

            //pictureBox1.Image.Save(path);
            //pictureBox1.Image.Dispose();
            BitmapImage bi= BITransformation(path);
            win.image1[win.imgNumber].Source = bi;
            win.fileName[win.imgNumber] = bi.UriSource.ToString();
            this.Close();
在线等,可加分,谢谢

我的代码问题是 第一次运行可以,但第二次调用这个方法时上面标注的地方就会报GDI+ 中发生一般性错误。

#4


引用 2 楼 Chinajiyong 的回复:
权限问题
http://bbs.csdn.net/topics/340250830

我的代码问题是 第一次运行可以,但第二次调用这个方法时上面标注的地方就会报GDI+ 中发生一般性错误。
权限问题的话,怎么赋给它权限呢

#5


直接 pictureBox1.Image.Save 不可以吗?干嘛绕个圈子?
再说 pictureBox1.Image.Dispose(); 已将资源释放了,再次执行怎么会对呢?

#6


using (Bitmap bmp = new Bitmap(pictureBox1.Image))
既然用了using, 这句就可以不要了bmp.Dispose();

#7


引用 4 楼 hanping8446 的回复:
Quote: 引用 2 楼 Chinajiyong 的回复:

权限问题
http://bbs.csdn.net/topics/340250830

我的代码问题是 第一次运行可以,但第二次调用这个方法时上面标注的地方就会报GDI+ 中发生一般性错误。
权限问题的话,怎么赋给它权限呢

因为不行,所以才试着释放一下

#8


引用 5 楼 xuzuning 的回复:
直接 pictureBox1.Image.Save 不可以吗?干嘛绕个圈子?
再说 pictureBox1.Image.Dispose(); 已将资源释放了,再次执行怎么会对呢?

因为不行,所以才试着释放一下

#9


引用 4 楼 hanping8446 的回复:
Quote: 引用 2 楼 Chinajiyong 的回复:

权限问题
http://bbs.csdn.net/topics/340250830

我的代码问题是 第一次运行可以,但第二次调用这个方法时上面标注的地方就会报GDI+ 中发生一般性错误。
权限问题的话,怎么赋给它权限呢

看看这篇文章  http://www.cnblogs.com/softidea/p/3253469.html