파일에서 이미지를 연 다음 잠금을 해제 하시겠습니까?
다음 코드 줄을 사용하여 Image
파일에서 를 엽니 다 .
pictureBox1.Image = Image.FromFile("test.png");
파일을 잠그고, 이미지를 메모리에로드하고, 메모리에 pictureBox1.Image
복사본을 설정 하고, 잠금을 해제 할 것으로 예상합니다 . 실제로, 잠금 내가 때까지 사라지지 않을 것 Dispose()
의 Image
메모리에. 나는에서 파일을 제거 할 때까지 나는 더 이상 사용하고있는 하드 드라이브에있는 파일에 대한 잠금을 해제 할 수 없습니다 기억 나는 것을 하고 사용.
Microsoft의 사이트는 C # 레이블이 붙은 기사에서 언급하지만 솔루션은 Visual Basic으로 작성되어 나에게 쓸모가 없습니다.
요약하면에 pictureBox1.Image
저장된 이미지 로 설정 "test.png"
한 다음 사용자가 편집하거나 삭제하도록하고 싶습니다 "test.png"
.
스트림에 대한 접근 방식 이 올바르지 않습니다 .
여기를 참조하십시오 https://stackoverflow.com/a/8701748/355264
위 링크의 올바른 코드 :
Image img;
using (var bmpTemp = new Bitmap("image_file_path"))
{
img = new Bitmap(bmpTemp);
}
또는 더 좋은 방법은 using
문을 사용하는 것입니다 (아래 코드는 사일 론의 [삭제] 게시물에서 복사 한 것입니다). 이렇게 Image.FromStream
하면 예외가 발생하는 경우 스트림이 즉시 닫힙니다.
using (FileStream stream = new FileStream("test.png", FileMode.Open, FileAccess.Read))
{
pictureBox1.Image = Image.FromStream(stream);
}
스트림을 사용하여 이미지를 읽은 다음 스트림을 닫을 수도 있습니다.
FileStream stream = new FileStream("test.png", FileMode.Open, FileAccess.Read);
pictureBox1.Image = Image.FromStream(stream);
stream.Close();
내가 찾은 가장 쉬운 방법은 소스 (파일 경로)를 포함하는 개체를 고정하는 것입니다. 이미지를 포함 할 수있는 모든 컨트롤은 null이 아닌 경우 가리키는 파일을 잠그는 .Source가있는 것처럼 보입니다.
이제 트릭은 이미지 컨트롤을 "읽기 전용"상태로 변경 한 다음 파일 잠금을 해제하는 것입니다.
내 솔루션 :
private Image CreatePreviewImage()
{
Image ReportImage = new Image();
Uri path = new Uri(@"C:\Folder\Image1.png");
if (File.Exists(path.OriginalString))
{
ReportImage.Name = "Report1";
ReportImage.Source = LoadImageFromFile(path);
}
return ReportImage;
}
public ImageSource LoadImageFromFile(Uri path)
{
BitmapImage bitmap = new BitmapImage();
bitmap.BeginInit();
bitmap.UriSource = path;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
bitmap.DecodePixelWidth = 900;
bitmap.EndInit();
bitmap.Freeze(); //This is the magic line that releases/unlocks the file.
return bitmap;
}
열린 이야기, 읽기 및 릴리스
StreamReader streamReader = new StreamReader("picture.png"); Bitmap tmpBitmap = (Bitmap)Bitmap.FromStream(streamReader.BaseStream); streamReader.Close(); pictureBox1.Image = tmpBitmap;`
참고URL : https://stackoverflow.com/questions/6576341/open-image-from-file-then-release-lock
'Development Tip' 카테고리의 다른 글
다중 세트, 맵 및 해시 맵 복잡성 (0) | 2020.11.11 |
---|---|
Ruby 기호와 동등한 Python이 있습니까? (0) | 2020.11.11 |
입력 할 때 html 텍스트 입력 필드가 커지나요? (0) | 2020.11.10 |
C에서 char 배열을 복사하는 방법은 무엇입니까? (0) | 2020.11.10 |
Lambda : 로컬 변수에는 최종, 인스턴스 변수는 필요하지 않습니다. (0) | 2020.11.10 |