2015-02-05 7 views
1

저는 C#에서 이미징을하는 상대적인 초보자입니다. 이것은 회원이되는 데 오랜 시간이 지난 후에이 보드에 대한 나의 첫 번째 질문입니다. 나는 그것이이 까다로운 시나리오를 극복하는데 도움이되기를 바랍니다.Image.Save()를 사용하면 C# Generic GDI + 오류가 발생합니다.

여러 페이지 TIFF의 내용 (프레임)을 읽고 각각을 목록으로 저장 한 다음 마지막으로 반환하여 일부 작업을 수행해야합니다.

Heres는 내 코드 지금까지

public static List<Image> GetAllPages(string file) 
{ 
    images = new List<Image>(); 
    using (Image img = Image.FromFile(file)) 
    { 
     try 
     { 
      for (int i = 0; i < img.GetFrameCount(FrameDimension.Page); i++) 
      { 
       img.SelectActiveFrame(FrameDimension.Page, i); 
       MemoryStream byteStream = new MemoryStream(); 
       img.Save(byteStream, ImageFormat.Tiff); 
       images.Add(Image.FromStream(byteStream)); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
    } 
    return images; 
} 

중요 - 윈도우 XP에서 동일하게 시도 할 때 나는 seemedly 잘 알려진 일반 GDI 얻을,하지만 윈도우 7에서 실행 할 때 실제로 매력처럼 작동 + 오류.

여기에 분명한 내용이 있습니까? 그렇지 않다면 다중 페이지 티프에서 추출한 이미지 목록을 반환하는 다른 방법이 있습니까?

누구든지 도움을 주시면 대단히 감사하겠습니다.

+3

XP에는 GDI +, v1.00의 이전 버전이 있습니다. 훨씬 향상된 버전 인 v1.10에서 코드를 테스트했습니다. byteStream.Position = 0;을 잊어 버린 것처럼 아무 것도 가능합니다. 영향력이있다. 특정 TIFF는 수천 개의 호환되지 않는 파일 형식의 머리 글자입니다. 우리 모두를지지하고 XP 지원을 중단하십시오. –

+0

@HansPassant 나는 GDI + 버전 시나리오에 대해 읽었습니다. 누군가가 지적 할 수있는 명백한 오류가 있었으면합니다. 나는 XP 지원을 중단하고 싶지만 불행하게도이 특별한 상황에서 나는 그 선택을하는 사람이 아니다. 그러나 제안한 행을 포함하여 테스트 해 보겠습니다. – user3095888

+0

다른 사람이 XP 지원을 중단하겠다고 나에게 (그리고 수천 명의 다른 사람들과) 간단히 말하면서이 점에 대해 더 많은 통찰력을 제공 할 수 있다면 매우 감사하게 생각합니다! – user3095888

답변

1

Hans Passant의 의견에는 2 가지 유용한 정보가 있습니다. 첫째, TIFF 형식은 GDI +에서 모두 지원되는 수많은 하위 형식과 변형을 지원합니다. 두 번째로, GDI +는 XP 이후에 개선되었지만 모든 곳에서 개선되지는 않았습니다.

코드는 Windows XP와 Windows 7 모두에서 작동하지만 올바른 입력 TIFF 파일에서만 작동합니다.

2 개의 입력 파일이있는 .NET 2.0 및 .NET 4.0 프로그램을 사용하여 테스트했습니다. 첫 번째 파일에는 6 페이지가 있으며, 모두 LZW 압축으로 인코딩되었습니다. 이 파일은 Windows 7과 XP 모두에서 작동했습니다.

두 번째 파일에는 11 가지 유형의 인코딩이 포함 된 11 페이지가 있습니다. Windows XP에서는 11 페이지 중 7 페이지 만 올바르게로드되었습니다. Windows 7에서는 작동하는 페이지 수가 더 적지 만 JPEG 압축은 XP에서 실패했지만 제대로 작동했습니다.

Windows 8.1은 둘 모두보다 성능이 좋았으며 올바르게 8 페이지를로드 할 수있었습니다.

이 페이지에서 사용되는 압축 형식의 목록과 함께 파일을 찾을 수 있습니다 : 물론 http://support.leadtools.com/CS/forums/44475/ShowPost.aspx

는 + 기본적으로 GDI가 지원하지 않는 대부분의 다른 TIFF 하위 유형이있다, 그러나이 (11) 보다 일반적인 형식 중 하나입니다.

이로 인해 Windows XP에서 파일을 가져 오는 문제가 발생합니다. Windows 7에서 작동하기 때문에 Windows 7에서는 작동하지만 JPEG 압축과 같은 XP에서는 작동하지 않는 TIF 하위 유형이있을 가능성이 큽니다. 그렇다면 .NET만으로는 충분하지 않으므로 이러한 파일을로드하는 데 전용 이미징 또는 TIFF 라이브러리를 사용해야 할 수도 있습니다.

+0

매우 도움이되었습니다. 매우 감사. 그것이 밝혀 졌을 때, 문제는 파일의 JPEG 압축 때문이었습니다 - XP/GDI1.0은 그런 것을 좋아하지 않았습니다. 이를 극복하기 위해, 적어도 단기간에, LZW로 작성된 파일을 배치하여 앱을 통과해야합니다. – user3095888

+0

LZW를 사용할 때의 장점은 JPEG와 달리 무손실입니다. 즉, 픽셀 무결성이 반복적 인 처리 또는 저장으로 저하되지 않음을 의미합니다. 그러나 한 가지 단점은 대부분의 이미지가있는 JPEG보다 큰 파일을 생성한다는 것입니다. –