저장된 이미지를 원래 사용하여 파일 GDI+
-
05-07-2019 - |
문제
었을 로드하는 비트맵 이미지 파일에서.가 이미지를 저장하는 또 다른 파일을 저는 가지고 다음과 같은 오류"일반적인 오류가 발생한 GDI+".저는 이것을 믿기 때문에 파일이 잠겨 있어에 의해 이미지 개체입니다.
그래서 확인 전화를 했습니다.클론 기능이 있다.이전 파일을 잠그.
hmm.다음 시을 로드하는 비트맵 이미지에서 FileStream 로드 이미지를 메모리로서 GDI+지 않은 파일입니다.이 좋은 작품을 제외하고 필요가 축소판 생성을 사용하여 이미지입니다.GetThumbnailImage 방법 그 밖의 메모리 예외는 아니다.분명히 내가 필요로 유지하는 스트림의 열기를 이 예외 그러나 계속다면 스트림을 열고 다음 파일이 남아 있는 잠겨 있습니다.
그래서 아무도 좋다는 방법입니다.끝에서 내가 만든 파일의 복사본.그래서 지금 내가 있는 2 가지 버전의 파일입니다.1 내가 잠글 수 있습 및 조작에 내 c#프로그램입니다.이 다른 원본 파일 잠금 해제된 상태를 유지하는 나 수정을 저장할 수 있습니다.이 있는 보너스의 수 있도록 되돌리려면 변경 사항을 저장한 후에도 그들이기 때문에 나는 조작하는 파일의 복사본을 없는 변화입니다.
반드시 더 좋은 방법이 이러한 목적을 달성하기 위한 없이 2 가지 버전의 이미지 파일입니다.어떤 아이디어가?
해결책 2
그 이후 발견되는 대체 방법을 복제하지 않고 이미지를 잠그는 파일입니다. 밥 Powell 는 그것의 모든 플러스 더 GDI 자원.
//open the file
Image i = Image.FromFile(path);
//create temporary
Image t=new Bitmap(i.Width,i.Height);
//get graphics
Graphics g=Graphics.FromImage(t);
//copy original
g.DrawImage(i,0,0);
//close original
i.Dispose();
//Can now save
t.Save(path)
다른 팁
잘 당신이 찾고 작업을 수행 할 수있는 다른 방법이 무엇을 요청하고,나는 그것을 만드는 일이 MemoryStream,그리고 읽 을 하드 이미지에서는 스트림을...
var stream = new FileStream("original-image", FileMode.Open);
var bufr = new byte[stream.Length];
stream.Read(bufr, 0, (int)stream.Length);
stream.Dispose();
var memstream = new MemoryStream(bufr);
var image = Image.FromStream(memstream);
거나 무언가가 예뻐하는 정도입니다.
지는 가야 할 길을 해결에 대해 그 문제,모르겠습니다.:) 나는 비슷한 문제를 가지고 있었고 상처는 고정이 이와 같습니다.
나는 유사한 문제입니다.하지만 나는 내가 이미지로 저장합 비트맵 파일에 있습니다.그래서 나는 이것:
public void SaveHeightmap(string path)
{
if (File.Exists(path))
{
Bitmap bitmap = new Bitmap(image); //create bitmap from image
image.Dispose(); //delete image, so the file
bitmap.Save(path); //save bitmap
image = (Image) bitmap; //recreate image from bitmap
}
else
//...
}
야드 최고의 방법이지만,그것의 일:-)