如何找出BufferedImage中的颜色通道顺序(包括alpha通道在内的不同类型)?
我需要知道LookupOp(byte [] []在ByteLookupTable(int,byte [] []))或RescaleOp(float [],float []中的操作的R,G和B参数的顺序],提示)。
是否有通用的方法从给定的BufferedImage中查找订单?我认为它应该在ColorModel中,但我找不到它。
我使用了像if (t == BufferedImage.TYPE_INT_ARGB)
这样的代码,但必须有更好的方法,对吧?
答案 0 :(得分:1)
我认为你所寻找的是分开的 SampleModel和ColorModel。
SampleModel
描述了数据的组织方式,可以让您获取一个或多个像素的数据。 (通过调用SampleModel
得到bi.getData().getSampleModel(),
,其中bi是BufferedImage。)
ColorModel
然后提供方法(getAlpha
,getRed
,getGreen
,GetBlue
),以便从像素中获取ARGB组件。
<强>附录:强>
我认为你使用它的方式是:
BufferedImage bi = ...;
Raster r = bi.getData();
// Use the sample model to get the pixel
SampleModel sm = r.getSampleModel();
Object pixel = sm.getPixel(0, 0, (int[])null, r.getDataBuffer());
// Use the color model to get the red value from the pixel
ColorModel cm = bi.getColorModel();
int red = cm.getRed(pixel[0]);
这看起来对于处理您可能遇到的任何颜色/样本模型非常灵活,但我无法想象性能会非常惊人。我可能会使用这种模型不可知的方法将图像转换为TYPE_INT_ARGB
,其中布局有详细记录,然后直接操作数据。然后,如有必要,将其转换回原始形式。