2017-04-19 33 views
0

LibTiff.netを使ってタイルTiffの一部をトリミングし、タイルTIFFとしてエクスポートしましたが、「タイルイメージをストリップされたイメージに書き込めません」という問題が発生しました。 「Tiff.open(」out.tif」、 『』ワット)が取り除か画像を作成しながら、どのように私はタイル張り-TIFFは、入力データとそれを埋めるために作成することができますか?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ファイルを書き込むためにタイルの幅とタイルの長さの属性を無視しました。どうもありがとう。 –

関連する問題