我有一个vb.net代码,它有一个外部脚本(用R编写),它创建一个图像并将其传递给vb.net代码以显示在图片框中。只有一个实例在使用时才能正常工作。
显示此图像时,它似乎已被锁定使用。尝试在通过脚本显示图像时编辑图像会导致失败的错误。尝试在绘画中编辑它会产生更具描述性的错误“已发生共享冲突”。
软件可以通过网络中连接的几台不同计算机同时在多个实例中运行。处理图像意味着它无法在屏幕上显示(改为给出红色十字图像),我尝试将图像作为原件的克隆加载到图片框中,然后处理原件 - 这会产生与原始图像相同的错误问题:
Dim someImage as bitmap = new bitmap(fileName)
pictureBox.image = someImage.clone()
someImage.dispose()
有没有办法让图像留在屏幕上但是可以自由访问以便其他软件可以编辑?
(如果图像在其他位置更改,我不需要自动更新图像。)
答案 0 :(得分:2)
克隆()不够好,你需要制作位图的深层副本。换句话说,不仅要复制图像属性,还要还复制像素数据。简单地使用Bitmap(Image)构造函数完成:
Using img = Image.FromFile(filename)
If PictureBox1.Image IsNot Nothing Then PictureBox1.Image.Dispose()
PictureBox1.Image = New Bitmap(img)
End Using '' File no longer locked here
我添加了Dispose()调用,通常是必需的。