写入多条JPEG编码的TIFF图像失败,并显示一些图像宽度

时间:2014-05-28 17:48:14

标签: java image compression jpeg tiff

我正在使用TIFF编码器进行新的JPEG压缩编码(Technote2)。为了使它更像一个新的JPEG样式,我正在写两个单独写的JPEG表格。它在大多数情况下工作正常但有一些特殊情况 - 图像宽度等于1000,2000,3000等,编码图像变为全灰色。我确信问题不是来自任何类型的数据类型溢出,并且没有显示任何错误。我用AsTiffTagViewer检查了标签,但是看不到任何问题。

注意:如果我只写一个条带,任何图像尺寸都没有问题。

以下是相关部分:

    int rowsPerStrip = imageHeight/2 + 1; // Two strips
    JPEGWriter jpgWriter = new JPEGWriter(); 
    // Write first strip
    jpgWriter.write(Arrays.copyOfRange(pixels, 0, imageWidth*(imageHeight/2 + 1)), imageWidth, imageHeight/2 + 1, randomOS); 
    // Another strip
    jpgWriter.write(Arrays.copyOfRange(pixels, imageWidth*(imageHeight/2 + 1), pixels.length), imageWidth, imageHeight - imageHeight/2 - 1, randomOS);

这里randomOS是一个随机访问输出流,用于处理TIFF,像素是整个图像的int数组。

ASTiffTagViewer为尺寸为2000x3000的示例图像显示的标签如下:

> SubFileType (1 Long): Zero
> ImageWidth (1 Long): 2000
> ImageLength (1 Long): 3000
> BitsPerSample (3 Short): 8, 8, 8
> Compression (1 Short): JPEG Technote #2
> Photometric (1 Short): YCbCr
> StripOffsets (2 Long): 8, 82430
> SamplesPerPixel (1 Short): 3
> RowsPerStrip (1 Short): 1501
> StripByteCounts (2 Long): 82422, 82422
> PlanarConfig (1 Short): Contig
> DateTime (24 ASCII): 2014:05:28 13:29:54 EDT
> JpegTables (574 Undefined):
> YCbCrSubsampling (2 Short): 1, 1
> ReferenceBlackWhite (3 Rational):

原始图像只是填充橙色,相同数量的StripByteCounts不应该是问题。

我正在通过Technote2寻找一些我可能错过但没有成功的东西。我希望这里有人能给我一些线索,因为我做错了。

1 个答案:

答案 0 :(得分:1)

只是为了清楚地接近这个问题:

问题解决了!当将图像尺寸扩展到8的倍数时,它实际上是我的JPEGWriter中的一个错误。感谢BitBank激发了讨论。