热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#窗体bitmap执行处理图片内存不足

BitmaporiginalImage(Bitmap)Bitmap.FromFile(originalImagePath);intthumWidth
 Bitmap originalImage =(Bitmap)Bitmap.FromFile(originalImagePath);
                int thumWidth = width;//缩略图的宽度        
                int thumHeight = height; //缩略图的高度       
                int x = 0; int y = 0;
                int originalWidth = originalImage.Width;//原始图片的宽度       
                int originalHeight = originalImage.Height;//原始图片的高度        
                switch (model)
                {
                    case "HW": //指定高宽缩放,可能变形                
                        break;
                    case "W": //指定宽度,高度按照比例缩放               
                        thumHeight = originalImage.Height * width / originalImage.Width;
                        break;
                    case "H": //指定高度,宽度按照等比例缩放                
                        thumWidth = originalImage.Width * height / originalImage.Height;
                        break;
                    case "Cut":
                        if ((double)originalImage.Width / (double)originalImage.Height > (double)thumWidth / (double)thumHeight)
                        {
                            originalHeight = originalImage.Height;
                            originalWidth = originalImage.Height * thumWidth / thumHeight; y = 0; x = (originalImage.Width - originalWidth) / 2;
                        }
                        else
                        {
                            originalWidth = originalImage.Width;
                            originalHeight = originalWidth * height / thumWidth; x = 0;
                            y = (originalImage.Height - originalHeight) / 2;
                        }
                        break;
                    default:
                        break;
                }  //新建一个bmp图片        
                System.Drawing.Image bitmap = new System.Drawing.Bitmap(thumWidth, thumHeight); //新建一个画板        
                System.Drawing.Graphics graphic = System.Drawing.Graphics.FromImage(bitmap); //设置高质量查值法       
                graphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;        //设置高质量,低速度呈现平滑程度   
                graphic.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;        //清空画布并以透明背景色填充       
                graphic.Clear(System.Drawing.Color.Transparent);        //在指定位置并且按指定大小绘制原图片的指定部分       
                graphic.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, thumWidth, thumHeight), new System.Drawing.Rectangle(x, y, originalWidth, originalHeight),
               System.Drawing.GraphicsUnit.Pixel);
               originalImage.Dispose();
               graphic.Dispose();
               GC.Collect();
                try
                {
                    bitmap.Save(thumNailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
                }
                catch (Exception ex) { throw ex; }
                finally { originalImage.Dispose(); bitmap.Dispose(); graphic.Dispose(); GC.Collect(); }
大家看下我这段代码有问题吗?为什么执行过一段时间会提示Bitmap originalImage =(Bitmap)Bitmap.FromFile(originalImagePath);这一句代码内存不足呢?

12 个解决方案

#1


#2


我查了一下,大概就两个原因吧,这么看代码也不知道哪里错了,看不出来

1.使用Rectangle对象时超出了图像的大小范围。
2.在指定图像的颜色数据格式(PixelFormat)时,生成的颜色数据格式与原图的数据格式不一致也将导致这个错误的出现.比如一张JPG的图片,保存是使用PixelFormat.Format8bppIndexed就会出现这样的错误。

#3


该怎么解决呢???我下面的代码和上面的对应的

#4


#5


在MSDN官网上介绍Bitmap.FromFile方法是基础于Image.FromFile方法的,官网链接为: http://msdn.microsoft.com/zh-cn/library/vstudio/stf701f5(v=vs.85).aspx
在上面有下面的一句话:
如果文件没有有效的图像格式,或者如果 GDI+ 不支持文件的像素格式,则此方法将引发 OutOfMemoryException 异常。

注意:
Image 类不支持位图中的 Alpha 透明。若要启用 Alpha 透明,请使用每像素 32 位的 PNG 图像。
所以我任务你创建的Bitmap修改为下面的:

Image tempimg =Image.FromFile(NextFile.FileName)
Bitmap originalImage =new Bitmap(tempimg.width,tempimg.Height,PixelFormat.Format32bppArgb)

#6


    为什么跑了十几分钟之后 内存急速上升!!!!!!

#7



Bitmap originalImage = (Bitmap)Bitmap.FromFile(NextFile.FullName)这一句报错提示内存不足什么原因呀

#8


我在传智播客上看到 他们有 加 using   菜鸟一个 不知道能不能帮到你

#9


我早就试过了也不行呀,还是跑了一段时间提示内存不足...

#10


我也遇到过,重新调试有时候就好了,应该是运行了一个功能后,没有及时的释放内存导致内存不足

#11


及时释放资源是最稳妥的方法。 gdi+ 效率太差。建议换套类库。

#12



程序执行一段时间后就报originalImage=(Bitmap)Bitmap.FromFile(NextFile.FullName);这句话内存不足...纠结死了该怎么搞呢

推荐阅读
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
author-avatar
流浪1种无奈
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有