문제

었을 로드하는 비트맵 이미지 파일에서.가 이미지를 저장하는 또 다른 파일을 저는 가지고 다음과 같은 오류"일반적인 오류가 발생한 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
            //...
    }

야드 최고의 방법이지만,그것의 일:-)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top