2014-04-18 2 views
0

LibTiff.Net 라이브러리를 사용하고 병합 도구 TiffCP api를 다시 작성하여 메모리 스트림을 사용하려고합니다.memorystream 대 filestream에서 다중 TIF 파일 작성 중?

이 라이브러리는 Tiff 클래스이며이 클래스에 스트림을 전달하여 tiff 이미지를이 스트림으로 병합 할 수 있습니다.

테스트를 위해 나는 Filestream을 전달했으며 원하는 부분을 얻었습니다. 병합되어 다중 페이지 티프를 볼 수있었습니다.

그러나 MemoryStream을 전달하면 페이지 데이터가 스트림에 추가되는 것을 확인할 수 있지만 마지막에 파일에 쓸 때 첫 번째 페이지 만 볼 수 있습니다.

var mso = new MemoryStream(); 
var fso = new FileStream(@"C:\test\ttest.tif",FileMode.OpenOrCreate); //This works 
using (Tiff outImage = Tiff.ClientOpen("custom", "w", mso, tso)) 
{ 
//... 
//.. 
System.Drawing.Image tiffImg = System.Drawing.Image.FromStream(mso, true); 
tiffImg.Save(@"C:\test\test2.tiff", System.Drawing.Imaging.ImageFormat.Tiff); 
tiffImg.Dispose(); 
//.. 
//.. 
} 

피씨 : 서버의 일부 폴더 권한 + 공급 업체 API 때문에 memorystream에 필요합니다.

답변

1

데이터가 실제로 스트림에 기록되기 전에 아마도 메모리 스트림을 사용하고있을 것입니다.

메모리 스트림의 데이터에 액세스하기 전에 Tiff.Flush() 메서드를 사용하십시오. 그리고 작성한 각 페이지에 대해 Tiff.WriteDirectory() 메소드를 호출하십시오.

편집 :

또한 Generating Multi-Page TIFF files에 밥 파월의 기사에서 봐 주시기 바랍니다. 이 기사에서는 EncoderParameter을 사용하여 실제로 여러 페이지 TIFF를 생성하는 방법을 보여줍니다.

tiffImg.Save(@"C:\test\test2.tiff", System.Drawing.Imaging.ImageFormat.Tiff); 

를 사용

당신은 아마 단지 첫 번째 프레임을 저장한다.

+0

두 함수를 모두 사용하고 있는데이 fso.Write (mso.GetBuffer(), 0, mso.GetBuffer(). Length); 파일 스트림을 사용할 때 두 페이지를 볼 수 있습니다. 보시다시피 저는 메모리 스트림에서 읽는 중입니다. 그러나 내가 System.Drawing.Image.FromStream (mso, true)와 같이 쓸 때; 첫 페이지 만 씁니다. – Dexters

+1

@Dexters 내 업데이트 된 답변을 참조하십시오. – Bobrovsky