BufferedImage中的频道顺序?

时间:2011-03-02 16:20:28

标签: java java-2d bufferedimage

如何找出BufferedImage中的颜色通道顺序(包括alpha通道在内的不同类型)?

我需要知道LookupOp(byte [] []在ByteLookupTable(int,byte [] []))或RescaleOp(float [],float []中的操作的R,G和B参数的顺序],提示)。

是否有通用的方法从给定的BufferedImage中查找订单?我认为它应该在ColorModel中,但我找不到它。

我使用了像if (t == BufferedImage.TYPE_INT_ARGB)这样的代码,但必须有更好的方法,对吧?

1 个答案:

答案 0 :(得分:1)

我认为你所寻找的是分开的 SampleModelColorModel

SampleModel描述了数据的组织方式,可以让您获取一个或多个像素的数据。 (通过调用SampleModel得到bi.getData().getSampleModel(),,其中bi是BufferedImage。)

ColorModel然后提供方法(getAlphagetRedgetGreenGetBlue),以便从像素中获取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,其中布局有详细记录,然后直接操作数据。然后,如有必要,将其转换回原始形式。