我正在尝试借助Java Advanced Imaging API将原始图像数据的byte []保存到硬盘上的.tiff文件中。 网上有一些小例子,但它们对我没有帮助,因为它们与我的确切问题不符。
我已经设法将byte []中的数据保存到.raw中,并且可以成功查看结果,因此源实际上包含一些数据。 有问题的方法是可执行的,没有任何例外,但每当我使用Windows XP ImageViewer查看时,我得到的都是黑色图像。
这是我的方法:
public void saveTif(byte[] imgData) {
BufferedImage bufferedImage = new BufferedImage( 1280, 1024, BufferedImage.TYPE_BYTE_GRAY );
bufferedImage.createGraphics().drawBytes(imgData, 0, 1280*1024, 0, 0);
TIFFEncodeParam params = new TIFFEncodeParam();
params.setCompression( TIFFEncodeParam.COMPRESSION_NONE );
String filenametiff = path + File.separatorChar + new SimpleDateFormat("dd_MM_yyyy_HH_mm_ss'.tiff'").format(new Date());
JAI.create("filestore", bufferedImage, filenametiff, "TIFF", params);
}
答案 0 :(得分:1)
Graphics.drawBytes()
用于绘制文本(并且它不是很好,因为它使用byte [],而不是char []或String,因此不支持charsets)到图像上。
Graphics.drawBytes()
不能用于绘制原始像素。
要获得图像的正确表示,您应该从像素数据中创建新的BufferedImage
,或者创建匹配的图像并将数据设置到其上。查看Raster
和DataBuffer
类。