日期:2014-05-18  浏览次数:20970 次

gdi+中发生一般性错误。。。。
也许看到这个题目很多人要喷我了。。
我也找了很多资料。
 
C# code
//创建一个bitmap类型的bmp变量来读取文件。
                Bitmap bmp = new Bitmap(fileNameExt);
                //新建第二个bitmap类型的bmp2变量
                Bitmap bmp2 = new Bitmap(800, 500, System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
                //将第一个bmp拷贝到bmp2中
                Graphics draw = Graphics.FromImage(bmp2);
                draw.DrawImage(bmp, 0, 0);
                filePanel.BackgroundImage = (Image)bmp2;//读取bmp2到picturebox
                //string file = openFileDialog1.FileName;
                openFileDialog1.Dispose();
                draw.Dispose();
                bmp.Dispose();//释放bmp文件资源

这是我找到并修改了的,由于我的panel大小是800,500的,设置完之后,添加图片都是正常的,但是打开图片的时候,图片不再是正好填充在panel里了。。filePanel.BackgroundImageLayout = ImageLayout.Stretch;我已经写了这句。
我在想是不是像素的问题??
有没有大神可以给点提示。。????
现在我的程序已经不报GDI+的错误了,就是图片打开有问题。。。

------解决方案--------------------
//新建第二个bitmap类型的bmp2变量
Bitmap bmp2 = new Bitmap(800, 500,


你把这句800,500,直接换成panel的宽和高
------解决方案--------------------
Bitmap bmp = new Bitmap("D:\\aaa.jpg");

//新建第二个bitmap类型的bmp2变量
Bitmap bmp2 = new Bitmap(bmp.Width, bmp.Height, System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
//将第一个bmp拷贝到bmp2中
Graphics draw = Graphics.FromImage(bmp2);
draw.DrawImage(bmp, 0, 0);
this.panel1.BackgroundImage = (Image)bmp2;//读取bmp2到picturebox
panel1.BorderStyle = BorderStyle.Fixed3D;
//string file = openFileDialog1.FileName;
draw.Dispose();

bmp.Dispose();//释放bmp文件资源

------解决方案--------------------
Bitmap bmp = new Bitmap("D:\\aaa.jpg");
this.panel1.BackgroundImage = (Image)bmp

实际上,只要这2句就够了。
------解决方案--------------------
每错,再加上filePanel.BackgroundImageLayout = ImageLayout.Stretch就能铺满了。
如果一定要按你的思路来,就改一句
draw.DrawImage(bmp, new Rectangle(Point.Empty, bmp2.Size), new Rectangle(Point.Empty, bmp.Size), GraphicsUnit.Pixel);
探讨

Bitmap bmp = new Bitmap("D:\\aaa.jpg");
this.panel1.BackgroundImage = (Image)bmp

实际上,只要这2句就够了。

------解决方案--------------------
panel1 的属性里面看有没有设置背景图片的模式,改为自动调整
------解决方案--------------------
去掉后面的16位色深参数,默认32位
Bitmap bmp2 = new Bitmap(800, 500)

draw.DrawImage(bmp, 0, 0);
改成
draw.DrawImage(bmp,New rectangle(0,0,800,500),new rectangle(0,0,bmp.width,bmp.height);