public static System.Windows.Media.Imaging.BitmapImage GetBitmapImage(string fileName)
if (File.Exists(fileName) == false) return null;
FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
var image = Image.FromStream(fileStream);
MemoryStream memory = new MemoryStream();
image.Save(memory, ImageFormat.Jpeg);
memory.Position = 0;
System.Windows.Media.Imaging.BitmapImage bitmapimage = new System.Windows.Media.Imaging.BitmapImage();
bitmapimage.BeginInit();
bitmapimage.StreamSource = memory;
bitmapimage.CacheOption = System.Windows.Media.Imaging.BitmapCacheOption.OnLoad;
bitmapimage.EndInit();
bitmapimage.Freeze();
fileStream.Close();
fileStream.Dispose();
return bitmapimage;
利用FileStream 打开图片,然后加载到MemoryStream中,并把FileStream 释放,这样加载到内存中的图片就不会提示被占用了。
public static System.Windows.Media.Imaging.BitmapImage GetBitmapImage(string fileName){ if (File.Exists(fileName) == false) return null; FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); var image = Image.FromS
C#中操作图片出现资源被占用用Image.FromFile读取图片后对图片进行其他操作时会出现IOException:“文件正由另一进程使用,因此该进程无法访问此文件”,可使用文件流读取图片解决该异常。
程序示例如下:
用VS2012新建一个winform程序,名为WindowsFormsApplication2,实现的功能为点击按钮,将指定路径下的bmp图片转换为jpg图片保存到相同路径下,保
使用流的方法展示图片,就算图片被删除 仍会显示:
FileStream fileStream = new FileStream(url, FileMode.Open, FileAccess.Read);
pictureBox.Image = Image.FromStream(fileStream);
fileStream.Close();
fileStream.Dispose()
方法2(推荐)
在Properties下Resources.resx中双击,添加资源,资源包括使用的图片、音视频(在resource中添加的资源就不需要考虑路径的问题)
资源文件在文件路径下Resources文件夹下
pictureBox1.Image = Properties.Resources._1062;
注:资源文件不能以数字开头命名
FileStream fs = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
byte[] bytes = new byte[fs.Length];
fs.Read(bytes, ...
原因:使用Image.FromFile方法,这个方法会锁定图片文件,而且会导致内存占用增大,不建议使用,一下是两种解决方法:
一:将Image类转换成Bitmap类
1 System.Drawing.Image img = System.Drawing.Image.FromFile(filepath);
2 System.Drawing.Image bmp = new System.Drawing...
前几天维护的程序发生了内存不足的
问题,经查看,是由于用户一次
加载了15张
图片,每张
图片的大小都接近1M,用户把
图片修改后,程序可以正常处理了。不过又想了一下,15张JPG
图片的大小 加起来也不过是最大15M而已,也不至于内存不够呀!于是检查代码: FileStream fs = new FileStream(txtImageName.Text, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
原理我像大家都很清楚,这里只说.NET(c#实现)。服务器每次启动或者重启,都是没登陆的。那意味着启动项里不只能做,我就考虑到使用Windows服务。Windows服务在系统加载时候就会启动所有服务,把程序写进里面应该没错了。 需要重启,那就要一个时间来效验,写法都有很多。我这里采用ini来存放。 Time 记录要重启的时间,验证时间。 Day 用来累加天数。 代码如下:[Reboot] Time=02:02:01 Day=3 使用System.Timers.Timer循环验证时间(不知道始终对占用资源是否会太大) 代码如下:private void Timer_Elapsed(objec
微软的 .NET FRAMEWORK 现在可谓如火如荼了。但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收
问题,一直存在困扰,尤其是 winform 程序,其主要原因是因为.NET程序在启动时,是需要由JIT动态编译并
加载的,这个
加载会把所有需要的资源都
加载进来,很多资源是只有启动时才用的。
以XP 系统为例子,程序启动后,打开任务管理器,会看到
占用的内存量比较大,你把程序最小化,会发现该程序
占用的内存迅速减小到一个很小的值,再恢复你的程序,你会发现内存
占用又上升了,但是比你刚启动时的内存
占用值还是小的,这就是一个资源
1.不使用反射机制就可以动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型
2.应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到该技术。
3.主要应用与类库,这些类库需要知道一个类型的定义,以便提供更多的功能
4.本源码只是一个DEMO,动态调用dll的方法非常简单实用。
问题情境:图片文件加载到pdf中,程序没有退出,再次加载该图片文件,提示被占用。
解决办法:
1.加载文件会锁定该文件,fromfile方法会导致占用内存较大,不使用该方法。
FileStream fileStream = new FileStream(filePath, FileMode.Open,FileAccess.Read);
int byteLength = (int)fil...
在这个示例中,`UpdateROI`方法会在多线程中被调用,如果当前线程不是UI线程,那么将使用`Invoke`方法在UI线程上执行`UpdateROI`方法。
在UI线程上,使用`CreateGraphics`方法创建一个Graphics对象,并使用`DrawRectangle`方法绘制一个红色边框的矩形。
你可以在你的代码中调用`UpdateROI`方法来更新pictureBox中的ROI。