在修改 PictureBox 图片时保持文件访问权限
在桌面应用程序中,如果原始图像文件已被使用,则使用新的 Bitmap() 构造函数修改 PictureBox 的图像可能会导致文件访问错误。当 PictureBox 保持对初始文件的引用时,就会出现此问题,从而阻止在加载新图像时访问该文件。
为了解决这个问题,一种内存友好的方法是使用 File.ReadAllBytes() 将图像加载到 MemoryStream 中,然后使用 Image.FromStream() 创建新图像。通过这种方式,在允许您在 PictureBox 中显示新图像而不会发生文件访问冲突的同时,原始文件将被解锁。
以下是修改后的代码示例:
<code class="language-c#">public static Image FromFile(string path) { byte[] bytes = File.ReadAllBytes(path); using (MemoryStream ms = new MemoryStream(bytes)) { Image img = Image.FromStream(ms); return img; } } pbAvatar.Image = FromFile(filePath);</code>
这种方法不仅解决了文件访问问题,而且还提高了性能。测试表明,使用此技术加载图像大约需要每张图像 0.26 毫秒,而从位图复制则大约需要每张图像 0.50 毫秒。字节数组较小的内存占用和单个图像创建操作有助于提高效率。
请注意,如果生成的图像需要是 Bitmap 对象,您可以使用 (Bitmap)Image.FromStream(ms) 来转换返回的 Image。 为了确保资源的正确释放,我们使用了using
语句来管理MemoryStream
。
以上是更新 PictureBox 图像时如何防止文件访问错误?的详细内容。更多信息请关注PHP中文网其他相关文章!