2013-06-20 1 views
2

Я искал поддержку необработанного изображения и нашел эту библиотеку (jrawio-1.6.1), которая расширяет изображение, чтобы добавить необработанную поддержку. Кажется, он работает, но ужасно медленный. Я видел улитки, которые были быстрее. Мой код обрабатывает Jpegs в секундах, и для обработки не намного большего .cr2-файла или .nef требуется несколько минут. Я мог ошибаться, но я думаю, что это даже замедлило обработку tiff. Последний файл tiff был очень большой, так что это тоже могло быть проблемой.Поддержка ImageIO для необработанных изображений (jrawio)

Другой вопрос, я с этой библиотекой является то, что развитие, кажется, было прекращено в 2009 году

Каковы мои альтернативы? Я попытался включить JAI, но некоторые из библиотек, из-за которых приложение вылетало после экспорта в исполняемую банку.

Похоже, что проблема заключается в imgScalr, потому что это изменение размера и вращение, которые являются медленными.

11.6MB nef-файл от Nikon D300 занимает 1 минуту 35 секунд, чтобы изменить размер до 20% и минуту 38, чтобы повернуть изображение на 90 градусов.

Но это не имеет для меня никакого смысла, потому что эти изображения вращаются и изменяются как буферизированные изображения не как их исходный формат. Может ли это быть проблемой размера с imgScalr?

Видимо, он имеет отношение к типу изображения. Если я конвертирую изображения в RGB, изменение размера и вращение происходит быстро, но преобразование в RGB занимает много времени. Я использую ColorConvertOp для преобразования.

+0

Что вы нашли? –

+0

@Java Devil жаль, что это было в названии, но SO не принимал титул.Я добавлю его в вопрос. – Codeguy007

+0

Действительно? Прекрасно работает для меня. Считывает 8mg RAW-файлы очень быстро, на самом деле для сохранения файлов jpeg или png требуется больше времени. – MadProgrammer

ответ

1

Похоже, что библиотека jrawio не является проблемой. Проблема заключается в цветовом формате исходного изображения. Scalr работает намного быстрее с форматами ARGB или RGB, и если вы конвертируете изображение в ARGB или RGB, прежде чем изменять изображение, изменения будут идти так же быстро, как JPEG. Однако само преобразование занимает одно из изменений.

+0

ImgScalr фактически преобразует файлы в RGB, прежде чем делать изменение размера, поэтому он так долго занимает. Просто используйте другую библиотеку размеров, потому что ImgScalr просто вызывает код Java2D. –

+0

Вы пытались предоставить изображение назначения в ImageReadParam, используя более стандартный формат цвет/пиксель? Посмотрите на «ImageReader.getImageTypes (int)» для возможных значений и «ImageReadParam.setDestination (BufferedImage)/setDestinationType (ImageTypeSpecifier)» для установки фактического адресата (типа). Могло бы сделать вещи быстрее (или просто переместить часть времени на чтение ...). – haraldK

+0

@Bailey, какие другие библиотеки размеров доступны. Я знаю о JAI, но что еще там? – Codeguy007

-1

ImgScalr фактически преобразует файлы в RGB, прежде чем делать изменения размера, так что именно поэтому она занимает так много времени

Выбор вариантов масштабирования изображения в Java несколько неудобно языка.

JAI и предлагаемый Java 2D apis производят ужасные, смотрящие вниз результаты, и я не могу их рекомендовать.

Если вызов собственного кода является опцией, и все ваши данные находятся в файлах, то im4java (библиотека для вызова исполняемого файла ImageMagick) хороша. Очевидно, это плохое решение для работы с выходом из другой библиотеки. http://im4java.sourceforge.net/

В противном случае техника ImgScalr на самом деле работает очень хорошо. По сути, это просто делает очень уродливое масштабирование Java2D пошагово, где оно уменьшает до нескольких размеров между исходным и желаемым размерами. Результаты имеют приемлемое качество. Возможно повторное использование кода в ImgScalr без выполнения преобразования RGB.

Не зная больше о jrawio (документации не существует), трудно сказать наверняка, но очень возможно, что он создает BufferedImage с очень странной цветовой моделью, которая существенно разгружает обработку RAW на Java2D. В этом случае фактическая вычислительная интенсивность преобразования RAW-> RGB может быть реальной работой. Затем, пропуская RGB-преобразование и работая с ужасно медленными операциями с изображениями, может означать выполнение работы несколько раз! Некрасиво.