如何获取图像(在文件中)通道数量(颜色深度)?

问题描述:

在这里,我们对如何从文件中获取图像的尺寸,一个很好的例子:https://stackoverflow.com/a/12164026/258483如何获取图像(在文件中)通道数量(颜色深度)?

该方法使用ImageReader它试图不,如果不需要它读取整个图像。

是否有类似的方法来获取图像的颜色深度,这是3彩色图像和1为黑白图像?

我发现它可能是ImageReader#getRawImageType(int)方法。这是正确的方法吗?

是,

您可以使用imageReader.getRawImageType(imageNo)。这种方法大部分时间都适用。不幸的是,它在某些情况下会返回null,最主要的是用于编码为YCbCr(而不是RGB)的JPEG图像,这可能是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 documentationIIOMetadataNode API doc以获取更多信息。