GDI +, JPEG 이미지에서 MemoryStream으로 일반 오류가 발생했습니다.


326

이것은 웹 전체에서 약간의 악명 높은 오류 인 것 같습니다. 시나리오가 맞지 않아서 문제에 대한 답변을 찾지 못했습니다. 이미지를 스트림에 저장하면 예외가 발생합니다.

이상하게도 이것은 png와 완벽하게 작동하지만 다소 혼란스러운 jpg와 gif에 대한 위의 오류를 제공합니다.

가장 비슷한 문제는 이미지를 권한없이 파일에 저장하는 것과 관련이 있습니다. 아이러니하게도 해결책은 내가하고있는 것처럼 메모리 스트림을 사용하는 것입니다.

public static byte[] ConvertImageToByteArray(Image imageToConvert)
{
    using (var ms = new MemoryStream())
    {
        ImageFormat format;
        switch (imageToConvert.MimeType())
        {
            case "image/png":
                format = ImageFormat.Png;
                break;
            case "image/gif":
                format = ImageFormat.Gif;
                break;
            default:
                format = ImageFormat.Jpeg;
                break;
        }

        imageToConvert.Save(ms, format);
        return ms.ToArray();
    }
}

예외에 대한 자세한 내용. 이것이 많은 문제를 일으키는 이유는 설명이 없기 때문입니다.

System.Runtime.InteropServices.ExternalException was unhandled by user code
Message="A generic error occurred in GDI+."
Source="System.Drawing"
ErrorCode=-2147467259
StackTrace:
   at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters    encoderParams)
   at System.Drawing.Image.Save(Stream stream, ImageFormat format)
   at Caldoo.Infrastructure.PhotoEditor.ConvertImageToByteArray(Image imageToConvert) in C:\Users\Ian\SVN\Caldoo\Caldoo.Coordinator\PhotoEditor.cs:line 139
   at Caldoo.Web.Controllers.PictureController.Croppable() in C:\Users\Ian\SVN\Caldoo\Caldoo.Web\Controllers\PictureController.cs:line 132
   at lambda_method(ExecutionScope , ControllerBase , Object[] )
   at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClassa.<InvokeActionMethodWithFilters>b__7()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
 InnerException: 

내가 지금까지 시도한 것들.

  1. 이미지를 복제하고 그 작업.
  2. JPEG 품질 설정으로 MIME에 대한 인코더를 검색합니다.



3
나에게 문제는 폴더가 존재하지 않았다는 것입니다. 폴더를 만들면 해결됩니다.
hazjack

나를 위해 그것은 범위를 벗어난 인덱스가 삼키는 것이 었습니다.
빌리 제이크 오코너

답변:


189

좋아, 나는 단지 운이 좋은 원인으로 그 원인을 찾았고 그 특정 방법에는 아무런 문제가 없다고 생각한다. 이는 콜 스택을 더 백업한다.

이전에 이미지 크기를 조정하고 해당 메소드의 일부로 다음과 같이 크기 조정 된 객체를 반환합니다. 위의 메소드에 대한 두 번의 호출과 파일에 직접 저장을 삽입했습니다.

// At this point the new bitmap has no MimeType
// Need to output to memory stream
using (var m = new MemoryStream())
{
       dst.Save(m, format);

       var img = Image.FromStream(m);

       //TEST
       img.Save("C:\\test.jpg");
       var bytes = PhotoEditor.ConvertImageToByteArray(img);


       return img;
 }

이 오브젝트이 작성된 메모리 스트림이 나타납니다 객체가 저장되는 시간 오픈 할 수 있습니다. 왜 그런지 잘 모르겠습니다. 누구든지 나를 깨우칠 수 있고 어떻게 해결할 수 있습니까?

난 단지 때문에 유사한 크기 조정 코드 사용 후 스트림에서 반환 그것은 하드 쓰기 일반적인 만드는 모든 이미지 객체에 대한 올바른 것으로 MIME 타입과 같은 대상 파일이 알 수없는 MIME 형식을 가지고 (img.RawFormat.Guid)과 ID를 그렇지 않으면 코드를 처리합니다.

편집하다

이것은 내 초기 검색에서 나타나지 않았지만 여기에 Jon Skeet의 답변이 있습니다.


4
메모리 스트림에서 비트 맵을 얻을 때 스트림을 닫지 않아야한다는 것을 몰랐습니다. 매우 도움이, 감사합니다
mcdon

38
감사합니다. 이것은 아마도 내 머리카락의 마지막을 구했을 것입니다.
NotMe

6
감사! 이 방법을 사용하면 시간을 많이 절약 할 수있었습니다. 한 가지, 답변 시작 부분에서 오류의 원인을 강조하고 싶을 것입니다. 이미지를 다시 사용하려고하면 메모리 스트림을 닫지 마십시오. "라고 생각합니다. D
DorD

6
"dst"변수는 무엇입니까?
WEFX

1
@madcapnmckay 'dst'변수가 무엇이며 그 의미가 무엇인지 설명해주세요
Mike T

131

해당 오류가 발생하면 응용 프로그램에 일부 디렉토리에 대한 쓰기 권한이 없다고 말할 수 있습니다.

예를 들어, 이미지를 메모리 스트림에서 파일 시스템으로 저장하려고하면 해당 오류가 발생할 수 있습니다.

XP를 사용하는 경우 해당 폴더에 aspnet 계정에 대한 쓰기 권한을 추가하십시오.

Windows 서버 (2003,2008) 또는 Vista를 사용하는 경우 네트워크 서비스 계정에 대한 쓰기 권한을 추가하십시오.

그것이 도움이되기를 바랍니다.


7
당신은하지 않았다! 나는 지독한 쓰기 권한으로 2 시간을 낭비했다. 이것을 게시하기 위해 여기에왔다. 당신이 더 많은 투표를 얻을 수 있기를 바랍니다. :)
Gleno

2
이것이 나를위한 해결책이었습니다. 완전히 +1!
Grandizer

5
비트 맵을 저장하기 전에 File.WriteAllText ( "filename.jpg", ""), File.DeleteFile ( "filename.jpg")을 수행 할 수 있습니다. 내 benmark에서 이것은 .001 초 밖에 걸리지 않으며 멋진 'filename.jpg를 저장할 권한이 없습니다'
Despertar

@Despertar File.Delete ()를 의미하지만 매우 유용한 트릭입니다! 비트 맵을 저장할 때마다 이것을 사용할 것입니다.
D Coetzee

2
제 경우에는 디렉토리가 존재하지 않았습니다.
침묵 메시지

54

이 오류의 원인을 추가하여 미래의 인터넷 여행자에게 도움이되기를 바랍니다. :)

GDI +는 이미지의 최대 높이를 65500으로 제한합니다

기본 이미지 크기 조정을 수행하지만 크기 조정시 종횡비를 유지하려고합니다. 우리는이 일을 조금 잘하는 QA 녀석이 있습니다. 그는 키가 480 픽셀 인 1 픽셀 너비의 사진으로 이것을 테스트하기로 결정했습니다. 이미지가 크기에 맞게 크기가 조정되었을 때 높이는 68,000 픽셀의 북쪽에 있었고 앱은으로 폭발했습니다 A generic error occurred in GDI+.

테스트로 직접 확인할 수 있습니다.

  int width = 480;
  var height = UInt16.MaxValue - 36; //succeeds at 65499, 65500
  try
  {
    while(true)
    {
      var image = new Bitmap(width, height);
      using(MemoryStream ms = new MemoryStream())
      {
        //error will throw from here
        image.Save(ms, ImageFormat.Jpeg);
      }
      height += 1;
    }
  }
  catch(Exception ex)
  {
    //explodes at 65501 with "A generic error occurred in GDI+."
  }

ArgumentException의 생성자에 친화적 인 .net이없는 것은 너무 나쁩니다 Bitmap.


17
감사합니다.이 인터넷 시간 여행자는이 메시지를 남겨 주셔서 감사합니다.
Tom West

내 테스트에서 65535는 실제로 최대 값입니다. 65536에서 일반 오류가 발생하기 시작합니다.
ChaseMedallion

Win10 .net 4.5 및 .net 4.6.1을 다시 시도하면 65501에서 폭발하여 더욱 무작위로 보입니다. 코드는 구문 오류로 가득 차 있으며 업데이트됩니다 :)
Fred

37

이 기사에서는 정확히 어떤 일이 발생하는지 설명합니다 : 비트 맵 및 이미지 생성자 종속성

요컨대, stream으로Image 구성된 수명 동안 스트림은 파괴되어서는 안됩니다.

그래서 대신

using (var strm = new ... )  {
    myImage = Image.FromStream(strm);
}

이 시도

Stream imageStream;
...

    imageStream = new ...;
    myImage = Image.FromStream(strm);

같이 ImageStream 형태 가까이 또는 웹 페이지 가까이에서.


그렇습니다. 나는 양심적이었고 내 스트림을 래핑 using하고 나중에 이미지를 메모리 스트림에 복사하려고 시도하고 "GDI +의 일반적인 오류"라는 메시지를 받았습니다.
윌 애플비

귀하의 링크는 나에게 무한 리디렉션을 제공했습니다. 이것은 작동합니다. 저축에 문제가 PixelFormat.Format32bppArgb있었지만 아닙니다 PixelFormat.Format1bppIndexed. 링크 된 기사에서 이유를 설명합니다. GDI +는 모든 것을 메모리에 유지하지 않고 소스 스트림에서 비트 맵 데이터를 다시 디코딩하도록 선택할 수 있습니다. 내 생각 엔 1bpp 이미지를 다시 디코딩하지 않습니다.
labreuer

새로운 링크조차 더 이상 작동하지 않습니다. 간단한 Google 검색으로 올바른 페이지가 보이지 않는 것 같습니다. 그러나 나는이 답변을 찾는 것이 매우 기뻤습니다! 이 문제로
Katjoek

28

잘못된 경로에 저장하려고하거나 권한 문제가있는 경우에도이 예외가 발생합니다.

파일 경로가 사용 가능하고 권한이 올바른지 100 % 확실하지 않은 경우 텍스트 파일에을 쓰십시오. 아주 간단한 해결책을 배제하는 데 몇 초 밖에 걸리지 않습니다.

var img = System.Drawing.Image.FromStream(incomingStream);

// img.Save(path);
System.IO.File.WriteAllText(path, "Testing valid path & permissions.");

파일을 정리하는 것을 잊지 마십시오.


이것은 저에게 문제였습니다 ... 오류가 덜 모호하기를 바랍니다. 시간을 많이 절약했을 것입니다.
Oofpez

예! 저장하려는 폴더가 존재해야합니다. 이제 이미지를 저장하기 전에 먼저 확인해야합니다. (아직도 1 년에 한 번 정도 오류가 발생합니다.)
Magnus Smith

내 경로는 파일이 아니라 디렉토리였습니다.
Asen Kasimov

20

비트 맵 변수에 이미지 저장

using (var ms = new MemoryStream())
{
    Bitmap bmp = new Bitmap(imageToConvert);
    bmp.Save(ms, format);
    return ms.ToArray();
}

이것은 내 문제를 해결했습니다. 이미지를 비트 맵에 저장하는 것이 예외를 두려워하는 이유를 설명해 주시겠습니까?
jmc

내 하루를 저장했습니다. 문제의 원인을 모르지만 비트 맵 저장이 작동합니다. System.Drawing.Image는 메모리 스트림에 저장되지 않지만 비트 맵은 작동합니다 !!!
San

이것은 나에게 가장 좋은 해결책이었습니다. 새로운 비트 맵 생성 및 변환
uzay95

17

누군가가 내가 멍청한 짓을한다면 1. 경로가 존재하는지 확인하십시오. 2. 쓰기 권한이 있는지 확인하십시오. 3. 경로가 올바른지 확인하십시오. 필자의 경우 TargetPath에 파일 이름이 없습니다.

"GDI +에서 일반적인 오류가 발생했습니다."보다 경로가 빨라졌습니다.


16

JPEG를 저장할 때이 오류가 발생하지만 특정 이미지에만 해당됩니다.

내 최종 코드 :

  try
  {
    img.SaveJpeg(tmpFile, quality); // This is always successful for say image1.jpg, but always throws the GDI+ exception for image2.jpg
  }
  catch (Exception ex)
  {
    // Try HU's method: Convert it to a Bitmap first
    img = new Bitmap(img); 
    img.SaveJpeg(tmpFile, quality); // This is always successful
  }

나는 이미지를 만들지 않았으므로 차이점이 무엇인지 알 수 없습니다.
누군가 설명 할 수 있다면 고맙겠습니다.

이것은 단지 SaveYpeg 함수입니다.

private static void SaveJpeg(this Image img, string filename, int quality)
{
  EncoderParameter qualityParam = new EncoderParameter(Encoder.Quality, (long)quality);
  ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg");
  EncoderParameters encoderParams = new EncoderParameters(1);
  encoderParams.Param[0] = qualityParam;
  img.Save(filename, jpegCodec, encoderParams);
}

private static ImageCodecInfo GetEncoderInfo(string mimeType)
{
    var encoders = ImageCodecInfo.GetImageEncoders();
    var encoder = encoders.SingleOrDefault(c => string.Equals(c.MimeType, mimeType, StringComparison.InvariantCultureIgnoreCase));
    if (encoder == null) throw new Exception($"Encoder not found for mime type {mimeType}");
    return encoder;
}

1
이로 인해 며칠간의 머리카락이 풀 렸습니다. 내가 쓴 것 중 가장 wtf 코드입니다. :)
Jeff Dunlop

13

파일을 저장 한 상위 폴더 중 하나에 후행 공간이 있으면 GDI +가 일반적인 예외를 throw한다는 것을 알았습니다.

즉, "C : \ Documents and Settings \ myusername \ Local Settings \ Temp \ ABC DEF M1 Trended Values ​​\ Images \ picture.png"에 저장하려고하면 일반 예외가 발생했습니다.

내 폴더 이름은 후행 공백이있는 파일 이름에서 생성되었으므로 쉽게 .Trim ()하고 이동할 수 있습니다.


3
굉장-나는 디렉토리 경로를 면밀히보고 생각하지 않았을 것입니다
jharr100

11

코드가 다음과 같으면이 오류가 발생합니다

private Image GetImage(byte[] byteArray)
{
   using (var stream = new MemoryStream(byteArray))
   {
       return Image.FromStream(stream);
    }
}

올바른 것은

private Image GetImage(byte[] byteArray)
{
   var stream = new MemoryStream(byteArray))
   return Image.FromStream(stream);        
}

using 블록에서 돌아 왔기 때문일 수 있습니다.


나를 위해 using 블록으로 돌아 왔습니다. 나는 여전히 사용하지만 블록 외부의 값을 반환합니다. 감사!
Dragouf

1
"어려운 방법"을 발견했습니다. 예를 들어 HttpContext.Response.OutputStream과 같은 새 스트림에 해당 이미지를 다시 저장하는 경우 오류가 발생하지 않으면 stream.Flush ()도 수행해야합니다. 다시.
Lucian

11

이것은 "GDI가 이미지의 높이를 65534로 제한합니다"라고 언급 한 Fred의 응답의 확장 / 자격입니다. 우리는 .NET 응용 프로그램 중 하나를 사용하여이 문제에 부딪 쳤고 포스트를 보았을 때 아웃소싱 팀이 손을 들어 큰 변화 없이는 문제를 해결할 수 없다고 말했습니다.

내 테스트를 기반으로 높이가 65534보다 큰 이미지를 만들거나 조작 할 수는 있지만 스트림 또는 파일을 CERTAIN FORMATS에 저장할 때 문제가 발생합니다 . 다음 코드에서 t.Save () 메서드 호출은 픽셀 높이가 65501 일 때 친구에게 일반적인 예외를 throw합니다. 호기심 때문에 폭 테스트를 반복했으며 같은 한계가 절약에 적용되었습니다.

    for (int i = 65498; i <= 100000; i++)
    {
        using (Bitmap t = new Bitmap(800, i))
        using (Graphics gBmp = Graphics.FromImage(t))
        {
            Color green = Color.FromArgb(0x40, 0, 0xff, 0);
            using (Brush greenBrush = new SolidBrush(green))
            {
                // draw a green rectangle to the bitmap in memory
                gBmp.FillRectangle(greenBrush, 0, 0, 799, i);
                if (File.Exists("c:\\temp\\i.jpg"))
                {
                    File.Delete("c:\\temp\\i.jpg");
                }
                t.Save("c:\\temp\\i.jpg", ImageFormat.Jpeg);
            }
        }
        GC.Collect();
    }

메모리 스트림에 쓰는 경우에도 동일한 오류가 발생합니다.

반올림하려면 위의 코드를 반복하고 ImageFormat.Jpeg를 ImageFormat.Tiff 또는 ImageFormat.Bmp로 대체하십시오.

이것은 나를 위해 높이 / 너비 100,000까지 실행됩니다-나는 한계를 테스트하지 않았습니다. .Tiff는 우리에게 실용적인 옵션이었습니다.

경고 받다

인 메모리 TIFF 스트림 / 파일은 JPG 대응보다 많은 메모리를 소비합니다.


10

매우 비슷한 문제가 있었고 작동하지 않는 이미지 복제를 시도했습니다. 가장 좋은 해결책은 메모리 스트림에서로드 된 이미지에서 새로운 비트 맵 객체를 만드는 것입니다. 이러한 방식으로 스트림은 예를 들어

using (var m = new MemoryStream())
{
    var img = new Bitmap(Image.FromStream(m));
    return img;
}

도움이 되었기를 바랍니다.


6

권한으로 인해 오류가 발생했습니다. 폴더에 모든 권한이 있는지 확인하십시오.

public Image Base64ToImage(string base64String)
    {
        // Convert Base64 String to byte[]
        byte[] imageBytes = Convert.FromBase64String(base64String);
        MemoryStream ms = new MemoryStream(imageBytes, 0,
          imageBytes.Length);

        // Convert byte[] to Image
        ms.Write(imageBytes, 0, imageBytes.Length);
        Image image = Image.FromStream(ms, true);
        return image;
    }

 img.Save("YOUR PATH TO SAVE IMAGE")

동의합니다. 나는 PERMISSION 으로이 문제를 해결했다
praguan

5

해결-나는이 정확한 문제가 있었다. 나에게 대한 수정은 IIS 서버에서 IUSR의 디스크 할당량을 늘리는 것이 었습니다. 이 경우 항목 이미지 등이 포함 된 카탈로그 앱이 있습니다. "익명 웹 사용자"의 업로드 할당량은이 특정 호스팅 회사의 IIS 서버에 대한 기본값 인 100MB로 설정되었습니다. 400MB로 올려서 오류없이 이미지를 업로드 할 수있었습니다.

이것은 귀하의 문제가 아닐 수 있지만 문제가 있으면 쉽게 해결할 수 있습니다.


4

내 경우에는 문제가 내가 저장 한 경로 (루트 C:\)에있었습니다. D:\111\예외가 사라지 도록 변경하십시오 .


4

이 오류의 또 다른 원인-Bitmap 인스턴스의 Save 메서드에 표시 한 경로가 존재하지 않거나 전체 / 유효한 경로를 제공하지 않았습니다.

전체 경로가 아닌 파일 이름을 전달했기 때문에이 오류가 발생했습니다!

일어난다!


4

내 차례!

using (System.Drawing.Image img = Bitmap.FromFile(fileName))
{
      ... do some manipulation of img ...
      img.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg);
}

using ()이 파일을 열어두고 있기 때문에 .Save ...에 넣었습니다. 그래서 덮어 쓸 수 없습니다. 아마도 이것은 미래에 누군가를 도울 것입니다.


4

내가 겪었던 것과 같은 문제. 그러나 제 경우에는 C 드라이브에 파일을 저장하려고했지만 액세스 할 수 없었습니다. 그래서 나는 완전히 접근 할 수있는 D 드라이브에 저장하려고 시도했으며 성공했습니다.

먼저 저장하려는 폴더를 확인하십시오. 해당 특정 폴더에 대한 모든 (읽기 및 쓰기) 권한이 있어야합니다.


일반적으로 c는 관리자 권한 없이는 허용되지 않습니다.
Aneeq Azam Khan

2

귀하의 "jpeg"사례는 실제로 다음과 같습니다.

            default:
                format = ImageFormat.Jpeg;
                break;

형식이 jpeg이고 다른 것이 아닌지 확인 하시겠습니까?

나는 시도 할 것이다 :

            case "image/jpg": // or "image/jpeg" !
                format = ImageFormat.Jpeg;
                break;

또는 imageToConvert.MimeType()실제로 돌아 오는 것을 확인하십시오 .

최신 정보

MemoryStream 객체에 대해 다른 초기화가 필요합니까?


감사. 확실히 올바른 형식으로 호출됩니다. jpg를로드하고 디버그하고 mime이 image / jpeg로 인식되고 형식이 JPG인지 확인합니다.
madcapnmckay 2016 년

3
오 잘-나는 항상 명백한 것을 먼저 제거하려고 노력합니다. 나는 그것을하지 않은 횟수를 셀 수 없으며 나중에 나를 물기 위해 돌아 왔습니다.
ChrisF

2
  • 이 문제는 테스트 서버에서는 발생했지만 라이브 서버에서는 발생하지 않았습니다.
  • 이미지를 스트림에 쓰고 있었으므로 권한 문제가 아니 었습니다.
  • .dll 중 일부를 테스트 서버에 직접 배포했습니다.
  • 전체 솔루션을 배포하면 문제가 해결되었으므로 컴파일 불일치가 이상했을 수 있습니다.

2

다른 가능한 해결책을 쌓기 위해이 오류 메시지와 함께 발생한 사례를 언급하겠습니다. 방법은 Bitmap.Save내가 변화었던 비트 맵을 저장하고 표시 할 때이 예외를 던질 것입니다. 명령문에 중단 점이 있으면 예외가 발생하지 않으며, Bitmap.Save앞에 오는 경우 Thread.Sleep(500)에도 리소스 경합이 발생한다고 가정합니다.

이미지를 새로운 비트 맵 객체에 복사하기 만하면이 예외가 나타나지 않습니다.

new Bitmap(oldbitmap).Save(filename);

2

PDF프로덕션 서버에서 ImageProcessor lib를 사용하여 이미지를 생성 하거나 크기를 조정 하는 데 비슷한 문제가 발생했습니다 .

응용 프로그램 풀을 재활용하여 문제를 해결하십시오.


1

이미지를 원격 위치 에 저장하려는 경우 NETWORK_SERVICE사용자 계정을 보안 설정 에 추가하고 해당 사용자에게 읽기 및 쓰기 권한을 부여하십시오. 그렇지 않으면 작동하지 않습니다.


1
byte[] bts = (byte[])page1.EnhMetaFileBits; 
using (var ms = new MemoryStream(bts)) 
{ 
    var image = System.Drawing.Image.FromStream(ms); 
    System.Drawing.Image img = image.GetThumbnailImage(200, 260, null, IntPtr.Zero);      
    img.Save(NewPath, System.Drawing.Imaging.ImageFormat.Png);
}


1

간단하고 새로운 비트 맵 인스턴스를 만들어 문제를 해결하십시오.

string imagePath = Path.Combine(Environment.CurrentDirectory, $"Bhatti{i}.png");
Bitmap bitmap = new Bitmap(image);
bitmap.Save(imagePath);

0

나를 위해 나는을 사용하고 Image.Save(Stream, ImageCodecInfo, EncoderParameters)있었고 분명히 이것은 악명 높은 원인이되었습니다.A generic error occurred in GDI+ 오류를 .

나는 사용하려고했다 EncoderParameterjpeg를 100 % 품질로 저장 . 이것은 "내 기계"(doh!)에서 완벽하게 작동했지만 프로덕션에서는 아닙니다.

내가 사용했을 때 Image.Save(Stream, ImageFormat)대신 오류가 사라졌습니다! 그래서 바보처럼 나는 후자를 계속 사용했지만 기본 품질로 저장했지만 50 %에 불과합니다.

이 정보가 누군가를 돕기를 바랍니다.


0

나도 문제가 발생했습니다. 로딩 스트림이 배치되어 문제가 발생했습니다. 그러나 나는 그것을 처분하지 않았다. 그것은 .Net 프레임 워크 안에 있었다. 내가해야 할 일은 사용이었습니다.

image_instance = Image.FromFile(file_name);

대신에

image_instance.Load(file_name);

image_instance는 System.Windows.Forms.PictureBox 유형입니다! PictureBox의 Load ()는 이미지가로드 된 스트림을 삭제하지만 그 사실을 몰랐습니다.


0

@savindra의 답변을 바탕으로 응용 프로그램에서 RHM 을 수행하고 관리자 권한으로 실행하면 문제를 해결해야합니다.

광산은 권한 문제인 것 같습니다.


0

이러한 오류를 발생시키는 가능한 문제는 다음과 같습니다.

  1. 디렉토리가 존재하지 않습니다 (호출하는 메소드는 자동으로이 디렉토리를 작성하지 않습니다)
  2. 출력 디렉토리에 쓸 수있는 보안 권한으로 앱을 실행하는 사용자가 쓸 수 없습니다

이것이 도움이되기를 바랍니다.이 문제에 대한 해결책이었습니다. 출력 이미지를 저장하기 전에 출력 디렉토리가 있는지 확인했습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.