java 读取tif图像,使用libtiff库读写32位tif图像 . (C )

我在使用LibTIFF库读取和保存32位图像时遇到问题 .

在我的代码中,我有一个uint32s数组,表示图像的像素值 .

当我将这些值保存到tif文件时,它看起来很好 . 但是,当我尝试使用LibTIFF库读取并将其保存为相同的TIFF文件时,图像在所有像素阵列上具有相同的溢出值(842150464 ......它太大!!) .

作为调试的结果,图像读取部分似乎没有问题 . 我认为写作部分是错误的,但我无法解决它 . (我试过TIFFWriteScanline和TIFFWriteEncodedStrip)

原始图像和书面图像(黑色像素)

50fb6292-93f5-4ce8-a4b5-856d31c4ded2.png

//---------------reading part------------------

TIFF* tif = TIFFOpen(filepath.c_str(), "r");

TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &width);

TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &height);

uint32* buffer = (uint32 *)malloc(width*height * sizeof(uint32));

TIFFReadRawStrip(tif, 0, buffer, width*height);

//---------------writing part------------------

TIFF *image = TIFFOpen("input.tif", "w");

TIFFSetField(image, TIFFTAG_IMAGEWIDTH, width);

TIFFSetField(image, TIFFTAG_IMAGELENGTH, height);

TIFFSetField(image, TIFFTAG_BITSPERSAMPLE, 32);

TIFFSetField(image, TIFFTAG_SAMPLESPERPIXEL, 1);

TIFFSetField(image, TIFFTAG_ROWSPERSTRIP, 1);

TIFFSetField(image, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT);

TIFFSetField(image, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG);

TIFFSetField(image, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK);

TIFFSetField(image, TIFFTAG_SAMPLEFORMAT, SAMPLEFORMAT_UINT);

TIFFSetField(image, TIFFTAG_COMPRESSION, COMPRESSION_NONE);

scan_line = (uint32 *)malloc(width*(sizeof(uint32)));

for (int i = 0; i < height; i++) {

memcpy(scan_line, &buffer[i*width], width * sizeof(uint32));

TIFFWriteScanline(image, scan_line, i, 0);

}

TIFFClose(image);

TIFFClose(tif);

free(buffer);

free(scan_line);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值