gpt4 book ai didi

java - Raster.getPixels() 返回的像素分量的顺序是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:10:23 29 4
gpt4 key购买 nike

我编写了将像素数据复制到整数数组的图像处理代码,如下所示:

void processImage(BufferedImage source) {

WritableRaster raster = source.getRaster();
int numBands = raster.getNumBands();
int height = raster.getHeight();
int width = raster.getWidth();

int[] pixelRow = new int[width * numBands];
for (int i = 0; i < height; i++) {
raster.getPixels(raster.getMinX(), raster.getMinY() + i, width, 1, pixelRow);

// do some processing
}

// create a new image
return newImage;
}

该代码适用于我目前测试过的图像。 pixelRow 数组似乎总是以红色、绿色和蓝色的顺序接收具有 3 个波段(无 alpha channel )的图像的像素分量,以及具有 4 个波段的图像的红色、绿色、蓝色和 Alpha 的顺序波段(带 alpha channel )。

但是,我找不到任何说明这一点的描述。是否保证我将始终按该顺序获得像素组件?有没有描述这个的规范?

最佳答案

SampleModel.getPixel()(由 Raster.getPixel() 内部使用)按波段顺序返回像素分量。虽然可以通过不同于 RGB 的波段顺序以编程方式创建 SampleModel 的虚假实例,但通常 SampleModel 的实例是由某些 ColorModel< 创建的 以与 ColorModel 中颜色分量的顺序相同的顺序构造带带的 SampleModel

颜色模型组件的顺序记录在 java.awt.image.ColorModel javadoc 中:

The number, order, and interpretation of color components for a ColorModel is specified by its ColorSpace.

理论上你应该检查颜色空间是否来自 RGB 系列:

public static void processImage( BufferedImage source )
{
ColorSpace colorSpace = source.getColorModel().getColorSpace();
if ( dumpColorSpaceProperties ) {
System.out.printf( "color space type: %d, is RGB = %s%n", colorSpace.getType(), colorSpace.isCS_sRGB() );
for ( int i = 0; i < colorSpace.getNumComponents(); i++ ) {
System.out.printf( "component %d = %s%n", i, colorSpace.getName( i ) );
}
}

if ( colorSpace.getType() == ColorSpace.TYPE_RGB ) {
// guaranteed RGB(A) order, proceed with raster.getPixels()
} else {
// well, find a way to convert from that space into RGB
throw new AssertionError( "color space type = " + colorSpace.getType() );
}
}

在实践中,这完全取决于图像的来源。通过 BufferedImage(width, height, imageType) 创建的图像始终使用 RGB 空间。如果图像文件格式支持不同的颜色空间并且特定图像文件使用非 RGB 空间,则从文件中获取的图像可以使用其他颜色空间。

如果您知道图像源,则无需检查颜色空间,您可以假设 Raster.getPixels() 输出 RGB(A)。

ColorSpace.getName(int) 源代码深入了解了在实践中可能遇到的大多数颜色集的默认组件。

关于java - Raster.getPixels() 返回的像素分量的顺序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23487181/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com