Image.FromFile引发的文件正由另一进程使用,因此该进程无法访问该文件

NET中的 Image.FromFile  一旦使用后,对应的文件在一直调用 其生成的Image对象被Disponse前都不会被解除锁定,这就造成了一个问题,就是在这个图形被解锁前无法对图像进行操作(比如删除,修改等操作).

在以前用的过程中曾用过下面三个方法解决问题.

 

第一种方法,在要进行文件操作前将Image对象销毁.
PictureBox picbox;
if(picbox.Image!=null)picbox.Image.Disponse();

第二种方法,就是在加载图像的时候用一种方法替代:

System.Drawing.Image img = System.Drawing.Image.FromFile(filepath);
System.Drawing.Image bmp = new System.Drawing.Bitmap(img.Width, img.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp);
g.DrawImage(img, 0, 0);
g.Flush();
g.Dispose();
img.Dispose();

//下面开始使用bmp作为显示的Image对象

一直以来用的是上面的第二种方法.今天实验出来突然有种方法更加简单:

System.Drawing.Image img = System.Drawing.Image.FromFile(filepath);
System.Drawing.Image bmp = new System.Drawing.Bitmap(img);
img.Dispose();
//下面开始使用bmp作为显示的Image对象

呃.就这样了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误通常表示在重命名文件时,目标文件已经被其他程序或进程打开或占用。这可能是因为您的代码在处理文件时没有正确关闭它们,导致文件仍然处于打开状态。 为了解决这个问题,您可以在处理完每个文件后,使用`cv2.destroyAllWindows()`关闭所有的OpenCV窗口,确保没有其他OpenCV窗口在使用这些文件。另外,您可能还需要在使用`cv2.imread`读取图像后,使用`cv2.imshow`显示图像,确保您没有忘记关闭显示的窗口。 以下是修改后的代码示例: ```python import pytesseract import cv2 import os from PIL import Image def get_image_paths(folder_path): image_paths = [] for root, directories, files in os.walk(folder_path): for file in files: if file.endswith(".jpg") or file.endswith(".png"): image_path = os.path.join(root, file) image_paths.append(image_path) return image_paths folder_path = "D:\SW_demo" old_paths = get_image_paths(folder_path) pytesseract.pytesseract.tesseract_cmd = 'E:\\Tesseract-OCR\\tesseract.exe' # 读取图像并处理 for old_path in old_paths: image = cv2.imread(old_path) # 转换为灰度图像 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 使用Tesseract进行文本识别 text = pytesseract.image_to_string(gray, lang='chi_sim') keyword = "LR" # 查找关键词后的文字 index = text.find(keyword) if index != -1: extracted_text = text[index + len(keyword):].strip() words = extracted_text.split() result = ' '.join(words[0:2]) # 只保留从第二个单词开始的部分 result = result.replace(" ", "") new_name = keyword + result + '.png' # 关闭OpenCV窗口 cv2.destroyAllWindows() # 提取关键词后的文字extracted_text = extract_text_from_image(image_path, keyword) print(new_name) new_path = os.path.join(folder_path, new_name) # 关闭图像文件 image.release() # 重命名文件 os.rename(old_path, new_path) ``` 请注意,我添加了`cv2.destroyAllWindows()`关闭所有OpenCV窗口的代码,并使用`image.release()`释放图像文件。这样可以确保在处理完一个图像后,关闭窗口并释放文件资源。 希望这可以解决您的问题!如有任何其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值