2012-10-23 3 views
0

GIF 압축을 사용하는 동안 TIFF 파일을 열어서 새 파일로 복사하면됩니다.Silverlight에서 LibTiff.Net을 사용하여 TIFF를 다시 꾸며보기

그래서 LibTiff.Net 및 TiffCP 유틸리티를 사용했습니다. TIffCP의 코드를 변환하는 데 최선을 다했는데 여기에있는 기능은 다음과 같습니다.

public static byte[] ConvertToG4Tiff(byte[] input) 
{ 
    var c = new Copier(); 

    // Set compression to g4 
    if (!c.ProcessCompressOptions("g4")) return null; 

    // Open output tiff 
    var memoryStream = new MemoryStream(); 
    var tiffStream = new TiffStream(); 
    using (var outImage = Tiff.ClientOpen(string.Empty, "w", memoryStream, tiffStream)) 
    { 
     using (var inImage = Tiff.ClientOpen(string.Empty, "read", new MemoryStream(input), new TiffStream())) 
     { 
      if (inImage == null) return null; 

      int totalPages = inImage.NumberOfDirectories(); 
      for (var i = 0; i < totalPages;) 
      { 
       c.m_config = PlanarConfig.UNKNOWN; 
       c.m_compression = c.m_defcompression; 
       c.m_predictor = c.m_defpredictor; 
       c.m_fillorder = 0; 
       c.m_rowsperstrip = 0; 
       c.m_tilewidth = -1; 
       c.m_tilelength = -1; 
       c.m_g3opts = c.m_defg3opts; 

       if (!inImage.SetDirectory((short)i)) return null; 
       if (!c.Copy(inImage, outImage) || !outImage.WriteDirectory()) return null; 

       i++; 
      } 
     } 

     var retVal = new byte[tiffStream.Size(memoryStream)]; 
     tiffStream.Read(memoryStream, retVal, 0, retVal.Length); 
     return retVal; 
    } 
} 

나는 마지막 3 줄이 엉망인 곳이라고 생각합니다. 유효한 바이트 배열을 다시 얻습니다 (데이터가 있으며 원래의 비 압축 TIFF의 약 10 %입니다)

코드를 다시 열려고하면 열리지 않습니다. 이 새로운 배열을이 동일한 함수를 통해 전달하면 작동하지 않습니다. 열린 오브젝트가 NULL입니다.

내가 뭘 잘못 했니?

답변

1

memoryStream을 사용하여 압축 된 데이터를 검색해야합니다. 이와 같은 코드에서 무엇이든 tiffStream을 사용하지 마십시오. 그래서

var retVal = new byte[tiffStream.Size(memoryStream)]; 
tiffStream.Read(memoryStream, retVal, 0, retVal.Length); 
return retVal; 
또한 입력 바이트 코드보다 래스터를 1bpp하지 않는 경우 귀하의 코드가 데이터를 변환하지 점에 유의하시기 바랍니다

var retVal = memoryStream.ToArray(); 
return retVal; 

아마로 변경해야 실패 할 것이다.

압축 된 데이터를 동일한 코드로 전달하려는 이유가 명확하지 않습니다.

+0

예, 변경 코드는 작동합니다! 내가 올바른 출력을 가지고 있는지 테스트하기 위해 동일한 코드에 압축 된 데이터를 전달하고 있었는데, 이것은 최종 코드가 아닙니다. 변환 주석을 주셔서 감사합니다. TIFF 사양을 더 자세히 파고들 필요가 있지만 괜찮을 것이라고 생각합니다. 나는 거대한 문서 기반을 가지고 있으며 압축되지 않은 스캔을 고객과 함께하고 있습니다 ... 이것은 내가 테스트하고있는 것입니다. – katit