2017-04-19 9 views
0

LibTiff.net을 사용하여 바둑판 식 배열 된 Tiff의 일부를 자르고 바둑판 식 Tiff로 내보내지만 "바둑판 무늬 이미지에 타일 이미지를 쓸 수 없습니다"라는 문제가 발생했습니다. 은 "Tiff.open ("out.tif "," "w)가 제거 이미지를 만들 동안, 어떻게 타일 - 티파니 입력 데이터로 채우기 위해 만들 수 있습니까?LibTiff.net을 사용하여 바둑판 식 배열 한 Tiff 만들기

using (Tiff input = Tiff.Open(@"E:\Sample_04.tif", "r")) 
     { 

      int width = input.GetField(TiffTag.IMAGEWIDTH)[0].ToInt(); 
      int height = input.GetField(TiffTag.IMAGELENGTH)[0].ToInt(); 

      int tileWidth = input.GetField(TiffTag.TILEWIDTH)[0].ToInt(); 
      int tileLentgh = input.GetField(TiffTag.TILELENGTH)[0].ToInt(); 

      int samplesPerPixel = input.GetField(TiffTag.SAMPLESPERPIXEL)[0].ToInt(); 
      int bitsPerSample = input.GetField(TiffTag.BITSPERSAMPLE)[0].ToInt(); 
      int photo = input.GetField(TiffTag.PHOTOMETRIC)[0].ToInt(); 
      int config = input.GetField(TiffTag.PLANARCONFIG)[0].ToInt(); 

      int tiles = 0; 
      int tileSize = input.TileSize(); 
      byte[][] buffer = new byte[tileSize][]; 


      int tileHeightCount = height/tileLentgh; 
      int tileWidthCount = width/tileWidth; 


      for (int y = 0; y < tileLentgh*5; y += tileLentgh) 
      { 
       for (int x = 0; x < tileWidth*5; x += tileWidth) 
       { 
        buffer[tiles] = new byte[tileSize]; 
        input.ReadTile(buffer[tiles], 0, x, y, 0, 0); 
        tiles++; 
       } 
      } 


      // writing 
      using (Tiff output = Tiff.Open("out.tif", "w")) 
      { 

       output.SetField(TiffTag.SAMPLESPERPIXEL, samplesPerPixel); 
       output.SetField(TiffTag.IMAGEWIDTH, width); 
       output.SetField(TiffTag.IMAGELENGTH, height); 
       output.SetField(TiffTag.BITSPERSAMPLE, bitsPerSample); 
       output.SetField(TiffTag.ROWSPERSTRIP, output.DefaultStripSize(0)); 
       output.SetField(TiffTag.PHOTOMETRIC, photo); 
       output.SetField(TiffTag.PLANARCONFIG, config); 

       int c = 0; 

       for (int y = 0; y < tileLentgh*5; y += tileLentgh) 
       { 
        for (int x = 0; x < tileWidth*5; x += tileWidth) 
        { 

         output.WriteTile(buffer[c], x, y, 0, 0); 
         c++; 
        } 
       } 
      } 
     } 
     System.Diagnostics.Process.Start("555.tif"); 

    } 
+0

을 나는 더 C# 또는 LibTiff.net 개발자는 아니지만, 나는'TiffTag.ROWSPERSTRIP를 설정한다고 가정 할 '필드는 이미지를 "박탈"시키는 것입니다.이 라인을 제거하면 어떻게됩니까? – haraldK

+0

질문을하기 전에이 줄을 제거했는데 아무 일도 없었습니다. 당신의 힌트를 가져 주셔서 감사합니다. –

+0

for 루프에서 'tileLength'와'tileWidth'를 5로 곱하는 이유는 무엇입니까? (표시되는 것보다 5 배 큰 타일입니까?) –

답변

0

은 타일 TIFF주세요 만들려면

output.SetField(TiffTag.ROWSPERSTRIP, output.DefaultStripSize(0)); 

를 사용하지 않습니다 그리고 당신은 절대적으로 WriteTile 방법을 사용하기 전에 TiffTag.TILEWIDTHTiffTag.TILELENGTH 필드를 설정해야합니다.

+0

예, 말씀 드렸듯이 타일 너비와 타일 길이 특성을 무시하여 내 tiff 파일을 작성했습니다. 고마워. –