1

メソッドTIFFReadScanline(tif, buf, row)を使用して、libtiff に約 500x500 の 32 ビット ピクセルの 1 つのストリップで構成される tiff ファイルを読み取らせようとしています。これにより、tdata_t (??) 行が得られます。

このバッファをテキスト ファイルとして書き出す、またはピクセル値 (倍精度である必要があります) にアクセスするにはどうすればよいですか?

私のコードは次のようになります。

TIFF* tif = TIFFOpen(c_str2, "r");
uint32 imagelength;
tdata_t buf;
uint32 row;

TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &imagelength);
buf = _TIFFmalloc(TIFFScanlineSize(tif));

for (row = 0; row < imagelength; row++){
        TIFFReadScanline(tif, buf, row);
        myfile << buf << endl;
}

最後の行で、バッファ全体をテキスト ファイルに書き出そうとしましたが、double 値はなく、16 進数値しかありません。tdata_t バッファを char バッファに置き換えると、ASCII シンボルが意味不明になります。tdata_t バッファーを double または char バッファーに変換する必要があると思いますが、どうすればよいでしょうか?

libtiff がこれを自動的に処理するので、バイト順であってはなりません。

どんな提案でも大歓迎です!ご協力ありがとうございました。良い週末をお過ごしください。

4

1 に答える 1

1

<< は、おそらく int である tdata_t の型を出力していることに気づき、読みやすくするためにそれらを 16 進数にします。

行内のすべての要素 (buf) をループし、それらを << (float)buf[element] で float として出力するだけです。

于 2011-02-04T16:14:25.997 に答える