Spec-Zone .ru
спецификации, руководства, описания, API
|
В то время как чтение возможностей формата файла ДЖИФА было доступно начиная с Java SE 1.4, com.sun.media.imageio.plugins.gif
пакет, в котором испытывают недостаток писатель. Писатель изображения недавно добавленного ДЖИФА позволяет писать изображения, которые удовлетворяют следующие требования:
Дополнительно, писатель изображений ДЖИФА поддерживает создание изображений анимированного ДЖИФА через стандартные методы, определенные в ImageWriter
class. См., что больше деталей о ДЖИФЕ отображает писателя в Стандартном плагине для примечаний формата изображения ДЖИФА.
ImageIO
class, которые получают суффиксы файла, которые будут фильтроваться. getReaderFileSuffixes()
и getWriterFileSuffixes
методы возвращают массив Strings
перечисление всех суффиксов файла, связанных с форматами, распознанными текущей группой зарегистрированных читателей и писателей. mark()
или reset()
методы ImageInputStream class
не работайте должным образом с PNG ImageReader
:Следующее примечание было добавлено к ImageInputStream
Спецификация class, чтобы разъяснить это ImageReader
классам позволяют вызвать flushBefore()
как часть процесса декодирования:
Отметьте, что это допустимо для ImageReader, чтобы вызвать flushBefore как часть операции чтения. Поэтому, если приложение вызывает метку до передачи того потока к ImageReader, приложение не должно предположить, что отмеченная позиция останется допустимой после того, как операция чтения завершилась.
javax.imageio.plugins.jpeg.JPEGQTable.toString()
метод производит неправильное описание:toString()
метод JPEGQTable
class в пакете javax.imageio.plugins.jpeg
как предполагалось, возвратил a String
объект, содержащий значения таблицы, но вместо этого повторенный только первая строка таблицы. Выполняемая фиксация устраняет эту ошибку. Ссылка к спецификации PNG в javax.imageio.metadata пакете была исправлена к следующему URL:
ImageInputStreamImpl.read()
метод отсутствует:ImageInputStreamImpl.java
у файла было отсутствие '*' символ в начале javadoc для краткого обзора read()
определение метода. Фиксация заполняет недостающий символ. BMPImageReader
class не в состоянии читать 3BYTE_BGR
изображения закодировали использование Писатель BMP с BI_JPEG
сжатие:Пытаясь записать изображение BI_JPEG
тип сжатия, java.io.EOFException
был брошен BMPImageReader
class. Проблема состояла в том что BMPImageReader
class не обрабатывал встроенные изображения оба из BI_JPEG
и BI_PNG
типы. Чтобы разрешить эту проблему, встроенная обработка изображения перемещается, чтобы разделить код.
TYPE_3BYTE_BGR
буферизованное изображение с BI_BITFIELDS
сжатие:Пытаясь записать буферизованное изображение TYPE_3BYTE_BGR
введите к файлу, используя BMPWriter
class и BI_BITFIELDS
тип сжатия, выходное изображение было искажено и неприменимо. Эта проблема была вызвана bitfileds масками, которые были применены к изображению bmp. Однако, формат данных изображения не был изменен согласно требованиям формата BMP. Решить эту проблему writePixels()
метод используется, чтобы скопировать данные изображения правильно.
ImageIO.write
методика, представленная файл BMP как 32 растровых изображения, даже если у исходного изображения было представление на 24 бита на пиксель. Фиксация включает writePixels
процедура всякий раз, когда число бит на пиксель меньше чем размер типа буфера данных (например, с TYPE_INT_RGB,
фактическое число бит на пиксель 24, в то время как размер типа буфера данных 32).
BMPReader
class не в состоянии читать TYPE_BYTE_GRAY
изображение, закодированное BMPWriter
class с BI_RLE8
сжатие: BMPReader
class должным образом не читал TYPE_BYTE_GRAY
изображение, записанное с BMPWriter
class используя BI_RLE8
сжатие. Проблема состояла в том, что процедуры декодирования RLE (и RLE4 и RLE8) по ошибке использовали width целевой области вместо height, чтобы вычислить диапазон строк изображения для того, чтобы скопировать. Выполняемая фиксация использует height целевой области, чтобы вычислить диапазон.
В то время как использование всех поддерживаемых типов сжатия для BMP, отличающегося, влияет на изображении, были обнаружены включая размывание, различное цветное появление, и небольшое повреждение изображения. Выполняемая фиксация разделяет обработку сжатие BI_RGB и сжатие BI_RGB следующим образом:
ImageInputStreamImpl
class все еще использует finalize()
метод, который вызывает java.lang.OutOfMemoryError
: finalize()
метод должен был быть освобожден, и его функциональность (закрывающий поток) должна быть заменена более быстрым механизмом. Завершение () метод не может быть легко освобождено в ImageInputStreamImpl
уровень, так как сторонние подклассы IISI могут положиться finalize()
метод вызывая их close()
метод согласно спецификации. Однако, для ImageInputStreamImpl
подклассы под управлением Sun, finalize()
методы могут быть освобождены. Механизм Устройства обработки отходов Java2D используется вместо этого.
JPEGImageWriter.write()
метод делает копию растра:Запись () метод JPEGImageWriter
class содержавший неэффективный памятью код. Предложенная фиксация помогает улучшить производительность для простых представленных изображений.
javax.imageio.ImageIO
class может обработать утечки в некоторых методах:Часть из read()
и write()
методы удобства в javax.imageio.ImageIO
class должным образом не закрывал потоки и располагал экземпляры читателя или писателя в попытке и наконец блокирует. Как фиксация соответствующие примечания были добавлены к javadocs каждого метода указание, является ли это обязанностью вызывающей стороны закрыть обеспеченный поток или нет.
read()
метод FileImageInputStream
4x было намного более дорогим чем создание единственного звонка read(byte[])
метод с кэшируемым байтовым массивом. Этот факт, оказанный глубокое влияние на производительность чтения маленького PNG и других изображений. Исправления выполнялись для readShort()
и readInt()
методы ImageInputStreamImpl
class. PNGImageReader
class должен пропустить метаданные если ignoreMetadata
флаг имеет true
значение:Перед JDK 6, PNGImageReader
Чтение class все метаданные изображения, даже если ignoreMetadata
флаг был установлен. Фиксация уменьшает издержки и улучшает производительность, читая маленькие изображения PNG, пропуская блоки метаданных если ignoreMetadata
флаг true
.
JPEGImageReader
class мог быть оптимизирован:Читатель изображения JPEG скопированные декодируемые данные в память, но не оптимизированным способом. Выполняемая фиксация улучшает эту работу при использовании memcpy()
метод вместо того, чтобы копировать один байт за один раз.
libjpeg
улучшить производительность времени выполнения: libjpeg
библиотека в JDK была создана с флагами компиляторной оптимизации значения по умолчанию. Значения этих флагов увеличиваются до более высокого уровня, чтобы позволить собственным библиотекам JPEG IJG работать быстрее.
Эта ошибка была исключением непроверенным и могла вызвать системный катастрофический отказ на некоторых платформах. Фиксация ловит IllegalArgumentException
, который бросается ICC_Profile, и обрабатывает изображения, не принимая во внимание недопустимые цветные профили.
IFileCacheImageInputStream
и FileCacheImageOutputStream
должен избегать использования File.deleteOnExit
метод:FileCacheImageInputStream
и FileCacheImageOutputStream
классы, используемые функциональность deleteOnExit
метод File
class. Фиксация заменила File.deleteOnExit () функциональность с рычагом завершения работы, который закрывает потоки, которые все еще открыты перед завершением работы VM. ImageReader
class не проверяет изображения, индексируют, который передают к некоторым из методов: getWidth(imgIndex)
, getHeight(imgIndex)
, и getAspectRatio(imgIndex)
методы ImageReader
class не бросал IndexOutOfBoundsException
если данное изображение PNG индексирует, испытывал недостаток диапазона. Выполняемая фиксация решает этот вопрос, выдавая исключение соответственно.
JPEGImageMetadata
полученный из бросков читателя NullPointerException
вызывая mergeTree()
метод:Список родительских атрибутов не содержал атрибуты, связанные с дочерним узлом и этим фактом, вызванным NullPointerException
в MarkerSegment.getAttributeValue()
метод, пытаясь получить дочерний элемент связанный атрибут. Выполняемая фиксация получает список атрибутов из дочернего узла.
Запущение любого приложения, которое читает или пишет изображения JPEG с нестандартным -Xcheck:jni
флаг, вызванный следующая ошибка в нескольких методах JPEGImageReader
class:
Calling other JNI functions in the scope of Get/ReleasePrimitiveArrayCritical or Get/ReleaseStringCritical
В фиксации методы, на которые влияют, окружаются макросами RELEASE/GET_ARRAYS.
imageio
у кода инициализации реестра не было доступа для чтения к флягам в java.ext.dirs
когда код реестра вызвали от контекста апплета. Поэтому, imageio
плагины, установленные к java.ext.dirs
не были доступны в случае апплетов. Идея фиксации состоит в том, чтобы зарегистрировать плагины от java.ext.dirs
в привилегированном блоке действия. ImageIO
сменный отказ заставляет всех читателей перестать работать:Удаление ImageIO
код плагина от пути к классу, но все еще включая запись для ImageReader плагина в META-INF/services, сделанном, используя любой из невозможных плагинов ImageIO. Чтобы исправить эту ошибку, 'пытаются поймать' блок, был добавлен к IIORegistry.registerApplicationClasspathSpis()
метод, чтобы поймать ServiceConfigurationError
.
Проблема состояла в том что новое ColorSpace
экземпляр был воссоздан для встроенных цветных профилей всякий раз, когда заголовок изображения был считан. Кроме того, не было никакого средства для корректного сравнения ColorSpace
и ICC_Profile
классы. Этот пропуск, сделанный, сравнивая экземпляры ImageTypeSpecifier
Невозможный class. Предложенное обходное решение для этой проблемы следующие: обнаружить случай когда iccCS
экземпляр содержит те же самые данные профиля как недавно чтение. Если так, 'старый' экземпляр оставляют; иначе (если данные профиля, кажется, отличаются) новый экземпляр цветового пространства создается для встроенного цветного профиля.
JPGReader
выдает исключение при использовании TYPE_CUSTOM TypeSpecifier
возвращенный Reader.getImageTypes
метод:Регресс был вызван фиксацией для JPEGImageReader.java
строки 783 - 786), потому что это вызвало дополнительное цветное преобразование для изображений со встроенными цветными профилями. Однако, это преобразование требовалось, когда целевой тип определенные различные цветовые пространства для изображений, которые не содержат встроенные профили. Фиксация для этого случая преобразовывает данные изображения из sRGB (произведенный декодером) к цветовому пространству, используемому в целевом изображении.
Если параметр записи с целевым типом использовался явно, чтобы записать изображение jpeg, то размер файла результата был больше, чем если бы тот же самый целевой тип использовался неявно. Проблема была показана, когда целевой тип был определен, но соответствующий объект метаданных не был определен. Фиксация создает объект метаданных использование данного целевого типа, чтобы создать объект маркера SOF, который будет использоваться, чтобы изменить значения по умолчанию QtableSelectors
.
ImageIO
правильно не читает определенный стандарт файлы JPG:ImageIO
неправильно чтения некоторые файлы JPG. Результатом было красное или зеленое изображение, которое было похоже на фотографическое отрицание. Фиксация устраняет преобразование цветового пространства для изображений EXIF. Чтобы обнаружить изображения EXIF, проверка на маркер APP1 в заголовке изображения добавляется. ImageIO
class:PNGImageReader
отказавший, чтобы создать ImageTypeSpecifier
экземпляр, соответствующий индексированному PNG, отображает если длина палитры изображения в меньшем чем 2 битовых глубины. Чтобы избежать этого ограничения, новые массивы палитры соответствующего питания 2 размеров создавались. Эти массивы дополняются последним значением от исходных массивов, чтобы избежать появления цветов, которые не существуют в исходной палитре. ImageIO.read
метод ненадлежащим образом декодирует Никона Йпегса: ImageIO
читатель jpeg выполняемое дополнительное цветное преобразование, если изображение, содержавшее встроенный цветной профиль. Ошибка была исправлена, удаляя дополнительную цветную работу преобразования.
Quality Desc
и Quality Values
массивы имеют ту же самую длину для JPG: JPEGImageWriteParam
class был обновлен так, чтобы getCompressionQualityValues()
метод возвращает массив, длина которого является одним большим чем массив, возвращенный getCompressionQualityDescriptions()
, согласно спецификации.
javax/imageio/IRPTest.java
сбои файла:Проблема была вызвана фиксацией для ошибки ImageReader.computeRegion()
метод использовался, чтобы вычислить целевую область. Чтобы избежать несоответствий между расчетным целевым смещением областей и мест назначения от параметра, destinationOffset
обновляется согласно расчетным значениям.
Отказ регрессионного теста был вызван созданием выходного файла изображения. Этот файл создавался после подсчета существующих файлов в рабочем каталоге и не был удален на конце регрессионного теста. Так, после выполнения регрессионного теста, рабочий каталог, всегда содержавший один дополнительный файл, хотя все временные файлы были удалены на выход VM. Решение состоит в том, чтобы использовать потоки ввода или вывода байтового массива вместо потоков ввода или вывода файла, чтобы избежать создавать дополнительные файлы в рабочем каталоге.
javax/imageio/stream/DeleteOnExit.sh
перестал работать:Проблема была вызвана фиксацией для ошибки
NoAPP0Test.java
регрессионный тест перестал работать на всех платформах:Различие в пиксельных значениях вызывается при использовании новой версии профиля sRGB, который был обновлен как часть фиксации для 6279846. Новый профиль был интегрирован в b92, создают.
close()
метод FileCacheImageInputStream
Сбои class:Проблема была вызвана фиксацией для ошибки FileCacheImageInputStream.close()
метод был изменен так, чтобы он обнулял свою ссылку на объект кэша. Устранить эту проблему FCIIS.read()
метод обновляется, чтобы вызвать checkClosed()
метод, поскольку это, как предполагается, делает.