我正在使用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寻找一些我可能错过但没有成功的东西。我希望这里有人能给我一些线索,因为我做错了。
答案 0 :(得分:1)
只是为了清楚地接近这个问题:
问题解决了!当将图像尺寸扩展到8的倍数时,它实际上是我的JPEGWriter中的一个错误。感谢BitBank激发了讨论。