C# 用非占用方式打开图片,得到bitmap,但后续操作bitmap就报内存溢出?
本帖最后由 getstr88 于 2022-6-25 20:43 编辑如下面代码,执行到bitmap.Clone这里报内存溢出
但是把LoadImageFile函数,换成IImage.FromFile就不报错了。
但是我不能用Image.FromFile,因为不允许占用图片,要求打开图片后立即释放handle,不能阻碍其他程序使用那个图片文件
所以求助:
1、想知道我下面这种写法报错的原因。
2、想知道怎么实现不占用打开图片后续还能正常操作bitmap
private void Form1_Load(object sender, EventArgs e)
{
Bitmap bitmap = LoadImageFile(@"D:\1.tif");
bitmap = bitmap.Clone(new Rectangle(0, 0, bitmap.Width, bitmap.Height), PixelFormat.Format1bppIndexed);
MessageBox.Show("1");
}
public static Bitmap LoadImageFile(string filePath)
{
FileStream fileStream = File.OpenRead(filePath);
Image image = Image.FromStream(fileStream);
fileStream.Close();
return (Bitmap)image;
} 你可以直接打开图片,需要操作图片时再dispose 落红护花 发表于 2022-6-25 09:40
你可以直接打开图片,需要操作图片时再dispose
???
给下代码吧,直接打开图片是怎么个函数,打开图片的方式我知道的有4种(Image.loadFromFile, Image.loadFromStream, new Bitmap, 要么先file读取再字节转图片),不知你说的哪种 先做一个检测,检测图片是否打开,检测没有打开,就进行下一步,打开就提示关闭,然后你再调用打开命令,打开后再做一个确认是否关闭(这一步关闭可以省略掉)。 forutry 发表于 2022-6-25 09:46
先做一个检测,检测图片是否打开,检测没有打开,就进行下一步,打开就提示关闭,然后你再调用打开命令,打 ...
完全和我要的不是一个东西
我要的是,将一个图片文件载入为bitmap,但载入完,立即释放这个文件,不影响其他应用或者操作系统再打开这个 forutry 发表于 2022-6-25 09:46
先做一个检测,检测图片是否打开,检测没有打开,就进行下一步,打开就提示关闭,然后你再调用打开命令,打 ...
from file
然后你直接操作文件会报错,例如删除
操作前先dispose getstr88 发表于 2022-6-25 09:47
完全和我要的不是一个东西
我要的是,将一个图片文件载入为bitmap,但载入完,立即释放这个文件,不影 ...
不做判断,那就调用完关闭它就可以了 落红护花 发表于 2022-6-25 09:49
from file
然后你直接操作文件会报错,例如删除
操作前先dispose
兄弟,你看看我问的是什么。你都dispose。我还能操作bitmap? forutry 发表于 2022-6-25 09:50
不做判断,那就调用完关闭它就可以了
Image.load 后怎么关?它是一直占用 privateImage LoadImg(string src)
{
byte[] file = System.IO.File.ReadAllBytes(src);
using (MemoryStream ms = new MemoryStream(file))
{
return Image.FromStream(ms);
}
}
private void Form1_Load(object sender, EventArgs e)
{
Image img = LoadImg(@"C:\Users\SkyEebb\Desktop\a.png");
this.pictureBox1.Image = img;
}
页:
[1]
2