2011-12-12 4 views
0

MSChart의 이미지를 내보내려고합니다.MSChart 기반 응용 프로그램에서 벡터 형식으로 예외가 발생하는 경우 내보내기

나는 멋진 기능

나는 ImageFormat 매개 변수와 함께 몇 가지 문제가 있어요 그러나
[System.Windows.Forms.DataVisualization.Charting.Chart.SaveImage][1] 

을 발견했다. 특히 사용자는 WIC 인코더가있는 형식으로 이미지를 저장할 수 있기를 바랍니다. 이를 위해 Image 코덱 목록을 얻고 사용자에게 모두 제공합니다.

사용자가 파일을 선택하면 해당 확장자를 가져와 목록에서 해당 확장자와 일치하는 코덱을 찾습니다. 다음과 같이 나는 다음 관련 ImageFormat을 만듭니다

ImageFormat imgFmt = new ImageFormat(codec.FormatID); 

내가 다음 차트 내보내려면 다음 전화 : 내가 EMF 또는 WMF을 선택한 경우

exportChart.SaveImage(mSaveFileDialog.FileName, imgFmt); 

그러나이 예외를 throw를 다음과 같이

A first chance exception of type 'System.ArgumentNullException' occurred in System.Drawing.dll 
An unhandled exception of type 'System.ArgumentNullException' occurred in System.Drawing.dll 

Additional information: Value cannot be null. 

괴상한 일이 내 이미지 형식을 만드는 경우 다음과 같이이다 :

ImageFormat imgFmt = ImageFormat.Emf; 

EMF를 아무 문제없이 씁니다. 나는 (원래 imgFmt으로) 할 또한 경우 :

imgFmt.Equals(ImageFormat.Emf) 

을 그리고 그건 사실 반환하지만 여전히 예외가 발생합니다.

왜 이런 일이 발생하고 내 문제에 대한 해결책을 갖고 있는지 아무도 모르는 사람이 있습니까?

답변

1

내부적으로 차트 컨트롤은 ImageCodecInfo를 선택하기 위해 제공 한 ImageFormat을 사용한다고 생각합니다. 이 코덱 정보를 찾을 수 없기 때문에이 예외가 발생합니다.

ImageFormat fmt = ImageFormat.Emf; 
ImageFormat fmt2 = new ImageFormat(ImageFormat.Emf.Guid); 
Console.WriteLine(fmt.ToString()); // gives: Emf 
Console.WriteLine(fmt2.ToString()); // gives: [ImageFormat: b96b3cac-0728-11d3-9d7b-0000f81ef32e] 

두 형식에서 ToString()을 호출하면 동일한 결과를 반환하지 않는다는 것을 알 수 있습니다. 인코더를 선택하는 코드가 GUID로 생성 된 ImageFormat을 예상하지 않고 단순히 알려진 형식 이름 목록을 찾는 것이 가능합니다.

mschart 샘플을 살펴보면이 함수의 기본 인수 형식은 Imageformat가 아닌 ChartImageFormat 열거 형입니다.

이렇게해도 문제가 해결되지는 않지만 잘하면 신비함을 덜어줍니다.

+0

버거. 저는 SVG로 내보낼 수 있기를 바랬습니다 ... SVG 변환기에 EMF가 필요할 것 같습니다 ... – Goz