2017-04-22 29 views
0

LibTiff.netライブラリを使用してTiff画像の一部を切り抜くために次のコードを使用しましたが、画像の色がfalseまたはpseudo colorsに変更されました。測光タグをYCBCRやPalleteのような他の可能なパラメータに変更しようとしましたが、結果は似ていました。元の画像と切り取られた画像がコードの下に添付されます。 この問題を解決するのに役立つと思います。LibTiff.netを使用してTIFFファイルをトリミングするときの画像の色を変更する

using (input) 
     { 
      int scanlineSize = input.ScanlineSize();  
      byte[][] buffer = new byte[height][]; 
      int yy = height/hRatio; 
      int xx = width/wRatio; 
      int yEnd = yo + yy; 

      // read 
      int k = 0; 
      for (int i = yo; i < yEnd ; i++) 
      { 
       buffer[k] = new byte[scanlineSize]; 
       input.ReadScanline(buffer[k], i); 
       k++; 
      } 

      // write 
      byte[][] bigHolder = new byte[height][]; 
      byte[][] holder = new byte[yy][]; 

      using (Tiff output = Tiff.Open("output.tif", "w")) 
      { 
       output.SetField(TiffTag.SAMPLESPERPIXEL, samplesPerPixel); 
       output.SetField(TiffTag.IMAGEWIDTH, xx); 
       output.SetField(TiffTag.IMAGELENGTH, yy); 
       output.SetField(TiffTag.BITSPERSAMPLE, bitsPerSample); 
       output.SetField(TiffTag.ROWSPERSTRIP, output.DefaultStripSize(0)); 
       output.SetField(TiffTag.PHOTOMETRIC, photo); 
       output.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);     

       int j = 0; 
       int w = scanlineSize/wRatio; 
       for (int i = 0; i < yy; i++) 
       { 
        bigHolder[i] = buffer[i].Skip(xo).ToArray(); 
        holder[i] = bigHolder[i].Take(w).ToArray(); 
        output.WriteScanline(holder[i], j); 
        j++; 
       } 
      } 
     } 

original image croped image

+0

iriginakとトリミングされた画像のTiffTag.PHOTOMETRICタグ値とTiffTag.COMPRESSIONタグ値は何ですか? – Bobrovsky

+0

私はgetFieldを使用して入力イメージからTiffTag.PHOTOMETRICを取得し、出力イメージに置き換えます。また、私の入力画像には圧縮モードが含まれていません。私は、色を変えるという関係があることを知りました。入力イメージと出力イメージに気付くと、赤は緑に、緑は青に、青は赤に変換されます。 –

答えて

0

私は問題を発見!入力TIFFは1ピクセルにつき3つのサンプルを含んでいるので、 "bigHolder [i] = buffer [i] .Skip(xo).ToArray();"という行にサンプルの代わりにイメージピクセルの数をスキップします。ですから、xoをSamplePerPixel * xoに変更しました。出力されたtiffは真の色のままです。

関連する問題