2017-05-14 23 views
0

画像の各ピクセルに浮動小数点数が含まれている32ビットのグレースケールTIFFファイルを読み込もうとしました。しかし、読み取りプロセスの間、バッファ配列は各ピクセルに対して4つの値を含む。例えば、ピクセル値= 43.0 - >ピクセル値{0、0、44、66}のバイト値。浮動小数点値とバイト値の関係を理解できません。私はまた、バッファを使用してイメージを書きましたが、出力イメージのピクセル値は1073872896のようなint値です。Libtiff.Netを使用して32ビットのグレースケールTiffを読み取る

using (Tiff input = Tiff.Open(@"E:\Sample_04.tif", "r")) 
     { 
      // get properties to use in writing output image file 
      int width = input.GetField(TiffTag.IMAGEWIDTH)[0].ToInt(); 
      int height = input.GetField(TiffTag.IMAGELENGTH)[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 scanlineSize = input.ScanlineSize(); 
      byte[][] buffer = new byte[height][]; 

      for (int i = 0; i < height; i++) 
      { 
       buffer[i] = new byte[scanlineSize]; 
       input.ReadScanline(buffer[i], i); 
      } 

     using (Tiff output = Tiff.Open("output.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, PlanarConfig.CONTIG); 
        output.SetField(TiffTag.COMPRESSION, compression); 

        int j = 0; 
        for (int i = 0; i < h; i++) 
        { 

         output.WriteScanline(buffer[i], j); 
         j++; 
        } 
       } 
     } 

アップデート1: バイト[] = {0、0、44:私はこのようにはC#でBitConverterクラスを使用して4バイトと画素値との関係を見出した

、66} - > 43 = BitConverter.ToSingle(a、0)および1110179840 = BitConverter.ToInt32(a、0)。それは、バイトがint32に変換されているようですが、今問題はバイト値を浮動小数点に変換する方法ですか?

アップデート2:スニペットのコードを書いた後 オリジナルのTIFFファイルやTIFFはattached.Whyていためちゃめちゃ出力TIFFファイルのですか?

Input tiffOutput tiff

+0

"画像の各ピクセルに浮動小数点数が含まれています"ということをどのように知っていますか? 「ピクセル値= 43.0」はどこから来たのですか? –

+0

と、「出力画像のピクセル値は1073872896のようなint値です」と思われる原因は何ですか? –

+0

質問に答えるため、ピクセル値とそのデータ型を表示するためにtiffファイルをArcMapにインポートしました。 –

答えて

0

Iフローティング番号に画素値を変換するためのコード行を追加し、それが正常に動作します。

output.SetField(TiffTag.SAMPLEFORMAT, SampleFormat.IEEEFP); 
関連する問題