1

我试图让 libtiff 使用TIFFReadScanline(tif, buf, row)方法读取由一条大约 500x500 32 位像素组成的 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;
}

在最后一行中,我尝试将整个缓冲区写出到一个文本文件中,但是没有双精度值,只有十六进制值。当我用 char 缓冲区替换 tdata_t 缓冲区时,会出现 ASCII 符号乱码。我想我应该将 tdata_t 缓冲区转换为 double 或 char 缓冲区,但如何?

它不应该是字节顺序,因为我认为 libtiff 会自动处理它。

欢迎任何建议!谢谢帮忙,祝大家周末愉快!

4

1 回答 1

1

<< 注意到您正在输出可能是整数的 tdata_t 类型并将它们放入十六进制以使其更易于阅读。

只需循环遍历一行中的所有元素(在 buf 中)并将它们输出为带有 << (float)buf[element] 的浮点数

于 2011-02-04T16:14:25.997 回答