gpt4 book ai didi

C# - 我可以使用 Libtiff 输出 Tiff 编码的 JPEG(在 YCbCr 中)

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:16 25 4
gpt4 key购买 nike

您好,我对 Libtiff 和图像处理还很陌生,当我尝试使用 Bitmiracle 的 Libtiff.net 时遇到了一个问题。

我有一些 OJPEG TIFF 图像,想将它们转换成现在的 JPEG TIFF。我通过将源转换为 BMP 然后另存为 TIFF(压缩:JPEG;光度:RGB)来实现这一点,但图像的尺寸非常大。所以我想如果我可以用 YCbCr 的光度来压缩它们,这样可以减少很多尺寸。

但是,当我将光度从 RGB 更改为 YCbCr 时,程序无法正常工作:输出只有 8 个字节(输入约为 400kb)。以TXT格式打开图片时,显示:

“二*”

我使用的代码是:

byte[] raster1 = getImageRasterBytes(inputbmp[0], PixelFormat.Format24bppRgb);
tif1.SetField(TiffTag.IMAGEWIDTH, inputbmp[0].Width);
tif1.SetField(TiffTag.IMAGELENGTH, inputbmp[0].Height);
tif1.SetField(TiffTag.COMPRESSION, Compression.JPEG);
tif1.SetField(TiffTag.PHOTOMETRIC, Photometric.YCBCR);
tif1.SetField(TiffTag.ROWSPERSTRIP, inputbmp[0].Height);
//tif1.SetField(TiffTag.JPEGQUALITY, confidence);
tif1.SetField(TiffTag.XRESOLUTION, 200);
tif1.SetField(TiffTag.YRESOLUTION, 200);
tif1.SetField(TiffTag.BITSPERSAMPLE,8);
tif1.SetField(TiffTag.SAMPLESPERPIXEL, 3);
int stride = raster1.Length / inputbmp[0].Height;
convertSamples(raster1, inputbmp[0].Width, inputbmp[0].Height);
for (int i = 0, offset = 0; i < inputbmp[0].Height; i++)
{
tif1.WriteScanline(raster1, offset, i, 0);
offset += stride;
}

我不太确定 WriteScanline 是否可以处理 YCbCr 输出,如果有其他方法,那也很酷。

谢谢你的帮助!

最佳答案

输出图像明显损坏。它通常在发生某些 fatal error 时发生。在这种情况下,库应该将警告和错误输出到控制台。

请调查警告和错误。他们可能会给你答案。

根据经验,我认为您可能为 ROWSPERSTRIP 标记提供了错误的值。该值应为 8 的倍数。

关于C# - 我可以使用 Libtiff 输出 Tiff 编码的 JPEG(在 YCbCr 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19219651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com