2014-09-27 4 views
0

Я застрял в 1.2.840.10008.1.2.4.70 - JPEG Lossless, Non-Hierarchical, First-Order Prediction при преобразовании DCM в jpg с помощью ImageIo.Ошибка при преобразовании .dcm в jpeg типа jpeg-lossless

У меня есть JAI ImageIO как указано here, и ImageIO.getReaderFormatNames()raw jpeg tif JFIF WBMP jpeg-lossless jpeg-ls PNM JPG DICOM wbmp PNG JPEG dicom jpeg 2000 tiff BMP JPEG2000 RAW JPEG-LOSSLESS jpeg2000 GIF TIF TIFF jpg bmp pnm jfif png JPEG 2000 gif JPEG-LS.

Однако, я получаю исключение в потоке «main»: java.lang.IndexOutOfBoundsException: imageIndex out of bounds, при чтении буферизованного изображения с помощью считывателя. Это мой код считывателя:

ByteArrayInputStream bais = new ByteArrayInputStream(dicomData); //byte array of DICOM data 
    ImageIO.scanForPlugins(); 
    Iterator<ImageReader> iter = ImageIO 
        .getImageReadersByFormatName("jpeg-lossless"); 
    ImageReader reader = (ImageReader) iter.next(); 
    ImageReadParam param = (ImageReadParam) reader.getDefaultReadParam(); 
    ImageInputStream iis = ImageIO.createImageInputStream(bais); 
    reader.setInput(iis, false);   
    BufferedImage buff = reader.read(0, param); // Error at this line 'imageIndex out of bounds!' 
    iis.close(); 

Это правильный способ сделать это или любым другим способом?

+0

Невозможно увидеть неправильный код. Вы можете попробовать переустановить свой код, а затем вызвать 'iter = ImageIO.getImageReaders (iis)' вместо 'getImageReadersByFormatName (...)' (что является более распространенным способом получения читателя). Скорее всего, JPEG-LOSSLESS, способный «ImageReader», не может читать ваши данные. «IOOBException» указывает, что читатель вообще не находит никаких изображений в данных (проверьте путем проверки 'reader.getNumImages (true)'). Возможно, вам придется немного «массажировать» 'dicomData', чтобы читатель принял это. – haraldK

+0

Привет, Харальд, спасибо за ответ, я перестроил свой код и использовал ImageIO.getImageReaders (iis), как вы предлагали, но теперь его давая ошибку javax.imageio.IIOException: Неподдерживаемый процесс JPEG: SOF тип 0xc3. И reader.getNumImages (true) дает 1. – Dharmraj

+1

Хммм .. Кажется, вы получили неправильный 'ImageReader' после изменения кода. Проверьте, действительно ли «читатель» является экземпляром «CLibJPEGImageReader» или просто нормальным «JPEGImageReader». – haraldK

ответ

1

Вы не можете использовать ImageReader без потерь JPEG, чтобы прочитать файл 10 части dicom. Вы должны рассмотреть возможность использования dcm4che imageio ImageReader для чтения файла. Когда он фактически попадает в часть данных пиксельных данных, он будет использовать JAI jpeg-ридер для декомпрессии содержимого изображения.

http://www.dcm4che.org/confluence/display/d2/dcm4che2+DICOM+Toolkit

Смежные вопросы