Класс ImageReadParam
- Direct Known Subclasses:
-
JPEGImageReadParam,TIFFImageReadParam
public class ImageReadParam extends IIOParam
ImageReader. Изображение, закодированное как часть файла или потока, можно представить как многомерное: пространственные размеры ширины и высоты, количество каналов и количество проходов прогерессивного декодирования. Этот класс позволяет выбрать непрерывную (гипер)прямоугольную подобласть изображения во всех этих измерениях для декодирования. Кроме того, пространственные размеры могут быть выборочно подвыбраны. Наконец, преобразования цвета и формата могут быть заданы путём управления ColorModel и SampleModel изображения назначения, либо предоставив BufferedImage или используя ImageTypeSpecifier.
Объект ImageReadParam используется для указания способа преобразования изображения или набора изображений при вводе из потока в контексте фреймворка Java Image I/O. Плагин для определенного формата изображения вернёт экземпляры ImageReadParam из метода getDefaultReadParam его реализации ImageReader.
Состояние, поддерживаемое экземпляром ImageReadParam, не зависит от конкретного декодируемого изображения. При фактическом декодировании значения, установленные в параметрах чтения, объединяются с фактическими свойствами изображения, декодируемого из потока, и назначенным BufferedImage изображением, которое получит декодированные пиксельные данные. Например, область источника, установленная с помощью setSourceRegion, будет пересечена с фактической допустимой областью источника. Результат будет транслирован значением, возвращаемым методом getDestinationOffset, а полученная прямоугольная область будет пересечена с фактической допустимой областью назначения, чтобы получить область назначения, в которую будет записано изображение.
Параметры, заданные объектом ImageReadParam, применяются к изображению следующим образом. Во-первых, если размер рендеринга был задан с помощью setSourceRenderSize, всё декодированное изображение будет рендериться в размере, заданном getSourceRenderSize. В противном случае изображение имеет свой естественный размер, определяемый ImageReader.getWidth и ImageReader.getHeight.
Затем изображение обрезается по области источника, заданной getSourceXOffset, getSourceYOffset, getSourceWidth и getSourceHeight.
Результирующая область затем подвыбирается в соответствии с коэффициентами, заданными в IIOParam.setSourceSubsampling. Первый пиксель, количество пикселей в строке и количество строк зависят от настроек подвыборки. Вызовите минимальные координаты X и Y полученного прямоугольника (minX, minY), его ширину w и высоту h.
Этот прямоугольник смещён на (getDestinationOffset().x, getDestinationOffset().y) и обрезается по границам назначения. Если изображение назначения не задано, назначение определяется шириной getDestinationOffset().x + w и высотой getDestinationOffset().y + h, чтобы все пиксели области источника могли быть записаны в назначение.
Пиксели, которые попадают, после подвыборки, в область изображения назначения и которые записываются в одном из проходов прогрессивного декодирования, указанных getSourceMinProgressivePass и getSourceNumProgressivePasses, передаются на следующий шаг.
Наконец, исходные образцы каждого пикселя отображаются в каналы назначения в соответствии с алгоритмом, описанным в комментарии к setDestinationBands.
Плагины-писатели могут расширить функциональность ImageReadParam путём предоставления подкласса, реализующего дополнительные плагин-специфические интерфейсы. Плагину необходимо документировать, какие интерфейсы доступны и как ими пользоваться. Читатели проигнорируют все расширенные функции подкласса ImageReadParam класса ImageReadParam, о которых им неизвестно. Они также могут игнорировать любые необязательные функции, которые они обычно отключают при создании собственных экземпляров ImageReadParam через getDefaultReadParam.
Обратите внимание, что если метод запроса для функциональности не существует, то она должна поддерживаться всеми реализациями ImageReader (например, размер рендеринга источника необязателен, но подвыборка должна поддерживаться).
- См. также:
Краткое описание полей
| Модификатор и тип | Поле | Описание |
|---|---|---|
protected boolean |
canSetSourceRenderSize |
true если этот ImageReadParam позволяет задать размеры рендеринга источника. |
protected BufferedImage |
destination |
Текущее назначение BufferedImage, или null если не задано. |
protected int[] |
destinationBands |
Набор каналов назначения, используемых в виде массива int. |
protected int |
minProgressivePass |
Минимальный индекс прохода прогрессивного декодирования для чтения из источника. |
protected int |
numProgressivePasses |
Максимальное количество проходов прогрессивного декодирования для чтения из источника. |
protected Dimension |
sourceRenderSize |
Желаемая ширина и высота рендеринга источника, если canSetSourceRenderSize является true, или null. |
Поля, объявленные в классе javax.imageio.IIOParam
controller, defaultController, destinationOffset, destinationType, sourceBands, sourceRegion, sourceXSubsampling, sourceYSubsampling, subsamplingXOffset, subsamplingYOffset
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ImageReadParam() |
Создаёт ImageReadParam. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
canSetSourceRenderSize() |
Возвращает true если этот читатель позволяет изображению источника быть рендеренным в произвольном размере во время процесса декодирования, с помощью метода setSourceRenderSize. |
BufferedImage |
getDestination() |
Возвращает текущее назначение, заданное методом setDestination, или null если не задано. |
int[] |
getDestinationBands() |
Возвращает набор индексов каналов, куда будут размещены данные. |
int |
getSourceMaxProgressivePass() |
Если getSourceNumProgressivePasses равно Integer.MAX_VALUE, возвращает Integer.MAX_VALUE. |
int |
getSourceMinProgressivePass() |
Возвращает индекс первого прохода прогрессивного декодирования, который будет декодирован. |
int |
getSourceNumProgressivePasses() |
Возвращает количество проходов прогрессивного декодирования, которые будут декодированы. |
Dimension |
getSourceRenderSize() |
Возвращает ширину и высоту изображения источника, как оно будет рендериться во время декодирования, если они были заданы методом setSourceRenderSize. |
void |
setDestination |
Предоставляет BufferedImage для использования в качестве назначения для декодированных пиксельных данных. |
void |
setDestinationBands |
Устанавливает индексы каналов назначения, куда будут помещены данные. |
void |
setSourceProgressivePasses |
Устанавливает диапазон проходов прогрессивного декодирования, которые будут декодированы. |
void |
setSourceRenderSize |
Если изображение может быть рендерировано в произвольном размере, устанавливает ширину и высоту источника до указанных значений. |
Методы, объявленные в классе javax.imageio.IIOParam
activateController, getController, getDefaultController, getDestinationOffset, getDestinationType, getSourceBands, getSourceRegion, getSourceXSubsampling, getSourceYSubsampling, getSubsamplingXOffset, getSubsamplingYOffset, hasController, setController, setDestinationOffset, setDestinationType, setSourceBands, setSourceRegion, setSourceSubsampling
Подробное описание полей
canSetSourceRenderSize
protected boolean canSetSourceRenderSize
true если этот ImageReadParam позволяет установить размеры рендеринга источника. По умолчанию значение равно false. Подклассы должны устанавливать это значение вручную. ImageReaderы, которые не поддерживают установку размера рендеринга источника, должны установить это значение в false.
sourceRenderSize
protected Dimension sourceRenderSize
canSetSourceRenderSize равно true, или null. ImageReaderы, которые не поддерживают установку размера рендеринга источника, могут игнорировать это значение.
destination
protected BufferedImage destination
BufferedImage, или null если не задано. По умолчанию значение равно null.destinationBands
protected int[] destinationBands
int. По умолчанию значение равно null, что указывает на то, что все целевые каналы должны быть записаны в порядке.minProgressivePass
protected int minProgressivePass
Подклассы должны убедиться, что это значение неотрицательно.
numProgressivePasses
protected int numProgressivePasses
Integer.MAX_VALUE, что указывает на то, что должны быть декодированы проходные кадры вплоть до последнего доступного. Подклассы должны убедиться, что это значение положительно. Кроме того, если значение не равно Integer.MAX_VALUE, то minProgressivePass + numProgressivePasses - 1 не должно превышать Integer.MAX_VALUE.
Подробное описание конструкторов
ImageReadParam
public ImageReadParam()
ImageReadParam.Подробное описание методов
setDestination
public void setDestination(BufferedImage destination)
BufferedImage для использования в качестве места назначения для данных декодированных пикселей. Текущая устанавливаемое изображение будет записано методами read, readAll, и readRaster, и ссылка на него будет возвращена этими методами. Данные пикселей из указанных методов будут записываться, начиная с смещения, заданного getDestinationOffset.
Если destination равно null, будет возвращено недавно созданное BufferedImage.
При чтении изображение проверяется, чтобы убедиться, что его ColorModel и SampleModel соответствуют одному из ImageTypeSpecifier возвращенных методом ImageReader's getImageTypes. Если это не так, читатель выбросит IIOException.
- Параметры:
-
destination- изображение BufferedImage, которое будет записано, илиnull. - См. также:
getDestination
public BufferedImage getDestination()
BufferedImage, текущее установленное методом setDestination, или null если ничего не установлено.- Возвращает:
- изображение BufferedImage, которое будет записано.
- См. также:
setDestinationBands
public void setDestinationBands(int[] destinationBands)
Значение null указывает на то, что будут использоваться все целевые каналы.
Выбор подмножества целевых каналов не повлияет на количество каналов в выходном изображении при чтении, если целевое изображение не указано; создаваемое целевое изображение все равно будет иметь то же количество каналов, что и если этот метод никогда не вызывался. Если требуется другое количество каналов в целевом изображении, изображение должно быть передано с помощью метода ImageReadParam.setDestination.
Во время чтения или записи читатель или писатель выбросит IllegalArgumentException, если указано значение, большее, чем наибольший индекс целевого канала, или если количество каналов источника и целевых каналов отличаются. Метод ImageReader.checkReadParamBandSettings можно использовать для автоматизации этой проверки.
- Параметры:
-
destinationBands- массив целочисленных индексов каналов, которые будут использованы. - Исключения:
-
IllegalArgumentException- еслиdestinationBandsсодержит отрицательное или дублирующее значение. - См. также:
getDestinationBands
public int[] getDestinationBands()
null для обозначения того, что будут использоваться все целевые каналы.- Возвращает:
- индексы целевых каналов, которые будут использованы, или
null. - См. также:
canSetSourceRenderSize
public boolean canSetSourceRenderSize()
true если этот читатель позволяет рендерить исходное изображение с произвольным размером в процессе декодирования, с помощью метода setSourceRenderSize. Если этот метод возвращает false, вызовы setSourceRenderSize выбросят UnsupportedOperationException. - Возвращает:
-
trueесли установка размера рендеринга источника поддерживается. - См. также:
setSourceRenderSize
public void setSourceRenderSize(Dimension size) throws UnsupportedOperationException
getWidth и getHeight в ImageReader, не изменяются этим методом; они по-прежнему будут возвращать размер по умолчанию для изображения. Аналогично, если изображение также разложено на плитки, ширина и высота плитки указаны относительно размера по умолчанию. Обычно ширина и высота должны быть выбраны таким образом, чтобы отношение ширины к высоте приблизительно соответствовало соотношению сторон изображения, возвращаемому методом ImageReader.getAspectRatio.
Если этот плагин не позволяет установить размер рендеринга, будет выброшено исключение UnsupportedOperationException.
Чтобы удалить установку размера рендеринга, передайте значение null для size.
- Параметры:
-
size-Dimension, указывающий желаемую ширину и высоту. - Исключения:
-
IllegalArgumentException- если ширина или высота отрицательны или равны 0. -
UnsupportedOperationException- если изменение размера изображения не поддерживается этим плагином. - См. также:
getSourceRenderSize
public Dimension getSourceRenderSize()
setSourceRenderSize. Значение null указывает на то, что никакая установка не была произведена.- Возвращает:
- ширину и высоту рендеринга исходного изображения в виде
Dimension. - См. также:
setSourceProgressivePasses
public void setSourceProgressivePasses(int minPass, int numPasses)
Проходной кадр — это повторная кодировка всего изображения, обычно с повышением эффективного разрешения, но требующая большей пропускной способности передачи. Наиболее распространенное использование прогрессивного кодирования встречается в формате JPEG, где последовательные проходные кадры включают более подробные представления высокочастотного содержимого изображения.
Фактическое количество декодируемых проходных кадров определяется во время декодирования на основе фактического количества доступных проходных кадров в потоке. Таким образом, если minPass + numPasses - 1 больше индекса последнего доступного проходного кадра, декодирование завершится на этом кадре.
Значение numPasses в Integer.MAX_VALUE указывает на то, что должны быть прочитаны все проходные кадры, начиная с minPass. В противном случае индекс последнего проходного кадра (т.е., minPass + numPasses - 1) не должен превышать Integer.MAX_VALUE.
Нет метода unsetSourceProgressivePasses; тот же эффект можно получить, вызвав setSourceProgressivePasses(0, Integer.MAX_VALUE).
- Параметры:
-
minPass- индекс первого проходного кадра для декодирования. -
numPasses- максимальное количество проходных кадров для декодирования. - Исключения:
-
IllegalArgumentException- еслиminPassотрицательно,numPassesотрицательно или равно 0, илиnumPassesменьшеInteger.MAX_VALUE, ноminPass + numPasses - 1большеINTEGER.MAX_VALUE. - См. также:
getSourceMinProgressivePass
public int getSourceMinProgressivePass()
- Возвращает:
- индекс первого пакета, который будет декодирован.
- См. также:
getSourceMaxProgressivePass
public int getSourceMaxProgressivePass()
getSourceNumProgressivePasses равно Integer.MAX_VALUE, возвращает Integer.MAX_VALUE. В противном случае, возвращает getSourceMinProgressivePass() +
getSourceNumProgressivePasses() - 1.- Возвращает:
- индекс последнего пакета для чтения, или
Integer.MAX_VALUE.
getSourceNumProgressivePasses
public int getSourceNumProgressivePasses()
Integer.MAX_VALUE (что является правильным значением).- Возвращает:
- количество пакетов, которые будут декодированы.
- См. также:
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.desktop/javax/imageio/ImageReadParam.html