getpixels java_java – Raster.getPixels()返回的像素组件的顺...

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

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)源提供了对实际可能遇到的大多数颜色集的默认组件的深入了解.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值