我在使用LibTIFF庫保存圖像時遇到問題。32位TIFF圖像顯示爲白色,與RAW不同
在我的代碼中,我有一個浮點數組,代表圖像的像素值。當我將這些值保存到RAW文件時,它看起來很好。但是,當我嘗試使用LibTIFF庫將其保存爲TIFF文件時,在ImageJ中打開它時圖像看起來非常好,但是當我在Photoshop或Windows中打開它時,它看起來很奇怪(看下面),Gimp顯示一個完全透明的圖像(就像圖像中根本沒有數據)。
我使用ImageJ打開RAW文件,圖像類型設置爲32位 - 真實和Little-endian字節順序被打勾。
下面是我用它來保存TIFF圖像的代碼:
TIFF *tif= TIFFOpen(name, "w");
TIFFSetField (tif, TIFFTAG_IMAGEWIDTH, width);
TIFFSetField (tif, TIFFTAG_IMAGELENGTH, height);
TIFFSetField (tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);
TIFFSetField (tif, TIFFTAG_SAMPLESPERPIXEL, 1);
TIFFSetField (tif, TIFFTAG_ROWSPERSTRIP, 1);
TIFFSetField (tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE);
TIFFSetField (tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);
TIFFSetField (tif, TIFFTAG_BITSPERSAMPLE, 32);
TIFFSetField (tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);
tsize_t strip_size = TIFFStripSize (tif);
tstrip_t strips_num = TIFFNumberOfStrips (tif);
float* strip_buf=(float*)_TIFFmalloc(strip_size);
for (unsigned int s=0; s<strips_num; s++) {
for (unsigned int col=0; col<width; col++) {
strip_buf[col]=image[s][col];
}
TIFFWriteEncodedStrip (tif, s, strip_buf, strip_size);
}
_TIFFfree(strip_buf);
TIFFClose(tif);
我敢肯定有什麼地方錯了,我保存文件的方式 - 但我不知道是什麼。非常感謝你的幫助!
在截圖中查看正確的圖片,我猜這只是32位TIFF文件中的低8位。所以這可能是Windows Image Viewer在遇到它只能部分理解的東西時所做的;) – he1ix