首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# Bitmap.Clone 方法,提示内存不足,该怎么解决

2012-04-03 
C# Bitmap.Clone 方法,提示内存不足我独单的写一些测试。测试过,发现提示内存不足的情况有两种:以下内容中:

C# Bitmap.Clone 方法,提示内存不足
我独单的写一些测试。

测试过,发现提示内存不足的情况有两种:

以下内容中:bitmap原对象:bm.Clone(...),这时bm就是bitmap原对象

1、就是Clone第一个参数:Rectangle的:X,Y,Width,Height的值,如果相对于bitmap原对象来说,
都是越界值(X,Y出现负数,或是X,Y大于bitmap的宽高;Width,Heigth相对X,Y坐标截图后过大)

2、就是Clone第二个参数:PixelForm,如果bitmap原对象本身的像素格式是不兼容这颜色格式的,也会报错。

以下代码,我测试过,没有问题:

C# code
            //Bitmap bm = (Bitmap)Image.FromFile(@"Pic/WEB Study.jpg");            //Bitmap bSp = bm.Clone(new System.Drawing.Rectangle(0, 0, 1, 1), bm.PixelFormat);            //bSp.Save(@"MyCutPicturesExport/WEB Study.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);


以下的代码是,出现问题的代码:
C# code
                        Rectangle rect = row[colIndex];                        Bitmap cutBitmap = pic.Clone(rect, pic.PixelFormat);监视器下的对象数据:        pic.Width    1000    int        pic.Height    634    int        pic.PixelFormat    Format24bppRgb    System.Drawing.Imaging.PixelFormat+        rect    {X = 0 Y = 0 Width = 20 Height = 20}    System.Drawing.Rectangle


第一个参数是没有出现越界值的,而第二个参数就是用回bitmap原对象的PixelForm,一样还是会出现:内存不足。

[解决办法]
建议你用Graphics 类画个新图。
C# code
                using (Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb))                {                    bmp.SetResolution(imageFrom.HorizontalResolution, imageFrom.VerticalResolution);                    using (Graphics g = Graphics.FromImage(bmp))                    {                        // 用白色清空                         g.Clear(Color.White);                        // 指定高质量的双三次插值法。执行预筛选以确保高质量的收缩。此模式可产生质量最高的转换图像。                         g.InterpolationMode = InterpolationMode.HighQualityBicubic;                        // 指定高质量、低速度呈现。                         g.SmoothingMode = SmoothingMode.HighQuality;                        // 在指定位置并且按指定大小绘制指定的 Image 的指定部分。                         g.DrawImage(imageFrom, new Rectangle(X, Y, width, height), new Rectangle(0, 0, imageFromWidth, imageFromHeight), GraphicsUnit.Pixel);                    }                }
[解决办法]
探讨
我独单的写一些测试。

测试过,发现提示内存不足的情况有两种:

以下内容中:bitmap原对象:bm.Clone(...),这时bm就是bitmap原对象

1、就是Clone第一个参数:Rectangle的:X,Y,Width,Height的值,如果相对于bitmap原对象来说,
都是越界值(X,Y出现负数,或是X,Y大于bitmap的宽高;Width,Heigth相对X,Y坐标……

热点排行