Класс ImageReadParam
- Прямые известные подклассы:
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 с помощью 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. |
Поля, объявленные в классе IIOParam
controller, defaultController, destinationOffset, destinationType, sourceBands, sourceRegion, sourceXSubsampling, sourceYSubsampling, subsamplingXOffset, subsamplingYOffset
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
ImageReadParam() |
Создаёт объект ImageReadParam. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
canSetSourceRenderSize() |
Возвращает true, если это средство чтения позволяет отображать исходное изображение в произвольном размере в процессе декодирования с помощью метода setSourceRenderSize. |
BufferedImage |
getDestination() |
Возвращает BufferedImage, заданный в данный момент методом 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 |
Если изображение можно отображать в произвольном размере, задаёт ширину и высоту источника равными указанным значениям. |
Методы, объявленные в классе 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, возвращаемых методом getImageTypes средства чтения ImageReader. Если соответствия нет, средство чтения вызовет исключение 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, 2025, 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/25/docs/api/java.desktop/javax/imageio/ImageReadParam.html