2013-06-10 2 views
0

Я пытаюсь сохранить байт [] необработанных данных изображения в .tiff-файл на моем жестком диске с помощью Java Advanced Imaging API. В Интернете есть несколько небольших примеров, но они не помогли мне, потому что они не соответствуют моей точной проблеме.JAI save byte [] to .tiff file

Мне уже удалось сохранить данные из байт [] в .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); 
} 

ответ

1

Graphics.drawBytes() используется для рисования текста (и это не очень хорошо для этого, так как он использует байт [], а не полукокса [] или строки, таким образом, не поддерживающие кодировок) на изображение.

Graphics.drawBytes() не может быть использован для рисования необработанных пикселей.

Чтобы получить правильное представление вашего изображения, вы должны создать новый файл BufferedImage из своих данных пикселов или создать соответствующее изображение и установить на нем данные. Взгляните на классы Raster и DataBuffer.

+1

О да! Благодаря! удаление линий drawBytes ... и добавление \t \t WritableRaster raster = bufferedImage.getRaster(); \t \t raster.setDataElements (0, 0, 1280, 1024, imgData); между работами отлично! :) – user1525814