다음 코드를 사용하여 두 이미지를 비교하고 결과를 저장합니다. 첫 번째 실행에서 나는 성공적으로 생성하고 결과 이미지, 을 저장하지만 두 번째 실행에서 나는 다음과 같은 예외가 :C# only Second Bitmap.Save produce GDI + 예외에서 일반 오류가 발생했습니다.
An exception of type 'System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.dll but was not handled in user code
Additional information: A generic error occurred in GDI+.
코드 :
MagickImage magickBaseImg = new MagickImage(new Bitmap(baseImageFileName));
MagickImage magickTargetImg = new MagickImage(new Bitmap(targetImageFileName));
var diffImg = new MagickImage();
magickBaseImg.Compare(magickTargetImg, ErrorMetric.RootMeanSquared, diffImg, Channels.Red);
Bitmap ImgToSave = diffImg.ToBitmap();
DateTime currentTime = DateTime.Now;
String differencesImageSavingPath = @"C:\test\DiffImage" + currentTime.ToString("ddMMyyyyHHmm") + ".bmp";
**ImgToSave.Save(differencesImageSavingPath, System.Drawing.Imaging.ImageFormat.Bmp);**
differencesImageFileName = differencesImageSavingPath;
DiffrenceImage.Source = new BitmapImage(new Uri(differencesImageFileName));
선으로 표시 ** 두 번째 실행에서 예외를 throw하는 행입니다. 이미 읽고 "사용"으로 고정 시도하고 .dispose 여기에 작성된 : 여기 A Generic error occurred in GDI+ in Bitmap.Save method 과 : A generic error occurred in GDI+, JPEG Image to MemoryStream
을하지만 그것은 작동하지 않습니다.
예를 들어, 다음 코드는 작동 중 하나를하지 않습니다
MagickImage magickBaseImg = new MagickImage(new Bitmap(baseImageFileName));
MagickImage magickTargetImg = new MagickImage(new Bitmap(targetImageFileName));
var diffImg = new MagickImage();
magickBaseImg.Compare(magickTargetImg, ErrorMetric.RootMeanSquared, diffImg, Channels.Red);
Bitmap ImgToSave = diffImg.ToBitmap();
DateTime currentTime = DateTime.Now;
String differencesImageSavingPath = @"C:\test\DiffImage" + currentTime.ToString("ddMMyyyyHHmm") + ".bmp";
using (var tempImg = new Bitmap(ImgToSave)) {
tempImg.Save(differencesImageSavingPath, System.Drawing.Imaging.ImageFormat.Bmp);
}
differencesImageFileName = differencesImageSavingPath;
DiffrenceImage.Source = new BitmapImage(new Uri(differencesImageFileName));
이미지가 다른 곳에서 열려 있지 않은지 확인하십시오. – BugFinder
tempImg을 열 수 없습니다. 새 인스턴스를 생성하고 "사용"문장 –
안에이 인스턴스를 호출해도 여전히 다른 곳에서 사용하지 못하도록합니다 – BugFinder