当前位置:编程学习 > C#/ASP.NET >>

关于GDI+问题寻解

这段代码总是在 img2.Save(@"d:\ttttt.bmp", ImageFormat.Bmp); 发生错误。
错误显示如下:
未处理 ExternalException
GDI+ 中发生一般性错误。

请大家指正一下,修改下代码以使其能运行。


        private void button6_Click(object sender, EventArgs e)
        {
            if (File.Exists(@"d:\ttttt.bmp"))
                File.Delete(@"d:\ttttt.bmp");

            Bitmap img = new Bitmap(3600, 4800, PixelFormat.Format24bppRgb);

            Graphics g = Graphics.FromImage(img);
            g.Clear(Color.White);

            img.Save(@"d:\ttttt.bmp", ImageFormat.Bmp);

            g.Dispose();
            img.Dispose();

            int barHeigh = 30;

            Pen pen = new Pen(Color.Black);
            pen.Width = 5.0F;

            int heigh = 5;

            for (float line = 30.0F; line <= 35.0F; line += 0.1F)
            {
                Bitmap img1 = new Bitmap(@"d:\ttttt.bmp");
                Bitmap img2 = new Bitmap(img1);

                img2.SetResolution(line * 10, line * 10);

                Graphics g1 = Graphics.FromImage(img2);

                g1.SetClip(new Rectangle(5, heigh, 600, heigh + barHeigh) );

                for (int width = 5; width <= 605; width += 10)
                {
                    g1.DrawLine(pen, new Point(width, heigh), new Point(width, heigh + barHeigh));
                }

                heigh = heigh + barHeigh + 10;


                img2.Save(@"d:\ttttt.bmp", ImageFormat.Bmp);

                g1.Dispose();
                img2.Dispose();

                img1.Dispose();

            }

        }
--------------------编程问答-------------------- 你跟踪测试一下吧,可能参数传递的有问题吧 --------------------编程问答-------------------- 在线求解,帮忙修改下代码 --------------------编程问答-------------------- 给你调试了一下,,你可以把保存的名字改一下就不会报错了……
不过你的这个弄图片也太大了,几十M…… --------------------编程问答--------------------
引用 3 楼 hengxinyi 的回复:
给你调试了一下,,你可以把保存的名字改一下就不会报错了……
不过你的这个弄图片也太大了,几十M……


您没有仔细看我的代码,没弄明白代码的含义,保存的文件名不能变。

               这段程序的本意是,针对每一线执行循环,
               每一次循环,按线路(line)的十倍,更改图像分辨率
               然后在每一个剪切区域中,通过循环画出许多竖线。
               然后就保存图像,重新执行line的循环。希望能得到
               这样的一幅图像:每一行里有许多竖线,每一行竖线都是
               按照不同分辨率画出来的,这样一幅图类似光栅测试条的图像。

不过还是很感谢您,麻烦您再看看,用什么办法能解决我的问题。
--------------------编程问答-------------------- 楼主,#1 的已经说了,你为什么不调试一下呢?设个断点就能调试的,
执行一下,单步跟踪就知道了呀。 --------------------编程问答--------------------
引用 5 楼 youzelin 的回复:
楼主,#1 的已经说了,你为什么不调试一下呢?设个断点就能调试的,
执行一下,单步跟踪就知道了呀。


我怎么没单步调试?先弄明白程序的意图再说吧,文件名不能改变的,一条测试条就要保存一个文件,那2条,3条。。。。。那岂不是要保存很多文件?必须在一个文件里,至于怎么控制,我没弄明白,希望各位能帮个忙。 --------------------编程问答-------------------- 这么大图片是不可能加载进去,把图形分形,或保存矢量图形 --------------------编程问答--------------------
引用 7 楼 li45214521 的回复:
这么大图片是不可能加载进去,把图形分形,或保存矢量图形


答非所问 --------------------编程问答--------------------
引用 8 楼 xuwencan 的回复:
引用 7 楼 li45214521 的回复:
这么大图片是不可能加载进去,把图形分形,或保存矢量图形


答非所问


人家没有答非所问,你自己说整段代码出现[b]GDI+ 一般性错误[\b],
图片太大无法加载报异常或许也是一种情况。

调试设断点:F9
单步跟踪:F10

再退一万步说,整个代码用 try catch 包起来,catch 里面 show 一个 messagebox,看看错误不就好了。
当遇到错误,就会显示出来啊。 --------------------编程问答-------------------- 在你的图片资源中,有这个ImageFormat名字吗?是不是改图片的名字了?造成的? --------------------编程问答--------------------
引用 9 楼 youzelin 的回复:
引用 8 楼 xuwencan 的回复:

引用 7 楼 li45214521 的回复:
这么大图片是不可能加载进去,把图形分形,或保存矢量图形


答非所问


人家没有答非所问,你自己说整段代码出现[b]GDI+ 一般性错误[\b],
图片太大无法加载报异常或许也是一种情况。

调试设断点:F9
单步跟踪:F10

再退一万步说,整个代码用 try catch ……


你把图片放小 就知道了 
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,