2015-09-30 7 views
1

Здесь мы имеем хороший пример того, как получить размеры изображения от файла: https://stackoverflow.com/a/12164026/258483Как получить изображение (в файле) количество каналов (глубина цвета)?

Метод использует ImageReader, который пытается не читать весь файл, если это не требуется.

Есть ли подобный метод получения глубины цвета изображения, который равен 3 для цветного изображения и 1 для черно-белого изображения?

Я нашел, вероятно, ImageReader#getRawImageType(int) метод. Правильно ли это?

ответ

1

Да,

Вы можете использовать imageReader.getRawImageType(imageNo). Этот метод будет работать большую часть времени. К сожалению, в некоторых случаях он вернет null, что наиболее заметно для изображений JPEG, закодированных как YCbCr (вместо RGB), и это, вероятно, самый распространенный случай для JPEG ...

Другой способ получить такую ​​же информацию использовать изображения мета объект данных, и посмотреть на стандартный формат метаданных, чтобы получить эту информацию:

IIOMetadata metadata = imageReader.getImageMetadata(imageNo); 
if (metadata.isStandardFormatSupported()) { // true for all bundled formats 
    IIOMetadataNode root = (IIOMetadataNode) imageMetadata.getAsTree("javax_imageio_1.0"); 

    // Get either (as pseudo-xpath): 
    // /Chroma/NumChannels[@value], which is just number of channels, 3 for RGB 
    // /Data/BitsPerSample[@value], bits per sample, typically 8,8,8 for 24 bit RGB 
} 

Вы можете посмотреть на standard format documentation и IIOMetadataNode API doc для получения дополнительной информации.