Module java.desktop
Package java.awt.image

Class ColorModel

java.lang.Object
java.awt.image.ColorModel
所有已实现的接口:
透明度
直接已知的子类:
ComponentColorModel, IndexColorModel, PackedColorModel

public abstract class ColorModel extends Object implements Transparency
ColorModel 抽象类封装了将像素值转换为颜色组件(例如红色、绿色和蓝色)和一个 alpha 组件的方法。为了将图像呈现到屏幕、打印机或另一个图像上,像素值必须转换为颜色和 alpha 组件。作为该类方法的参数或返回值,像素表示为 32 位整数或基本类型数组。颜色空间指定了 ColorModel 的颜色组件的数量、顺序和解释。用于不包含 alpha 信息的像素数据的 ColorModel 将所有像素视为不透明,即 alpha 值为 1.0。

这个 ColorModel 类支持两种像素值的表示。像素值可以是单个 32 位整数或基本类型数组。Java(tm) 平台 1.0 和 1.1 API 将像素表示为单个 byte 或单个 int 值。对于 ColorModel 类的目的,像素值参数被传递为整数。Java(tm) 2 平台 API 引入了用于表示图像的附加类。使用基于 BufferedImageRenderedImage 对象,基于 RasterSampleModel 类,像素值可能无法方便地表示为单个整数。因此,ColorModel 现在具有接受基本类型数组表示的像素值的方法。特定 ColorModel 对象使用的基本类型称为其传输类型。

用于像素值不方便表示为单个整数的图像的 ColorModel 对象在调用接受单个整数像素参数的方法时会抛出 IllegalArgumentExceptionColorModel 的子类必须指定发生这种情况的条件。这不会发生在 DirectColorModelIndexColorModel 对象上。

目前,Java 2D(tm) API 支持的传输类型有 DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT、DataBuffer.TYPE_INT、DataBuffer.TYPE_SHORT、DataBuffer.TYPE_FLOAT 和 DataBuffer.TYPE_DOUBLE。大多数渲染操作在使用基于前三种类型的 ColorModels 和图像时会执行得更快。此外,某些图像过滤操作不支持基于后三种类型的 ColorModels 和图像。在创建对象时,特定 ColorModel 对象的传输类型是在创建时显式指定或默认指定的。所有 ColorModel 的子类必须指定可能的传输类型以及如何确定表示像素的基本数组中元素的数量。

对于 BufferedImages,其 Raster 的传输类型和 Raster 对象的 SampleModel(可以从这些类的 getTransferType 方法中获取)必须与 ColorModel 的传输类型匹配。表示像素的数组中元素的数量(可以从这些类的 getNumDataElements 方法中获取)必须与 ColorModel 的数量匹配。

用于从像素值转换为颜色和 alpha 组件的算法因子类而异。例如,从 BufferedImage 对象的 RasterSampleModel 获取的样本与颜色/alpha 组件之间不一定有一一对应关系。即使存在这样的对应关系,样本中的位数也不一定与相应颜色/alpha 组件中的位数相同。每个子类必须指定如何执行从像素值到颜色/alpha 组件的转换。

ColorModel 类中的方法使用颜色和 alpha 组件的两种不同表示形式 - 规范化形式和非规范化形式。在规范化形式中,每个组件是介于某些最小值和最大值之间的 float 值。对于 alpha 组件,最小值为 0.0,最大值为 1.0。对于颜色组件,每个组件的最小值和最大值可以从 ColorSpace 对象中获取。这些值通常为 0.0 和 1.0(例如,默认 sRGB 颜色空间的规范化组件值范围从 0.0 到 1.0),但某些颜色空间的组件值具有不同的上限和下限。可以使用 ColorSpace 类的 getMinValuegetMaxValue 方法获取这些限制。规范化颜色组件值未经预乘。所有 ColorModels 必须支持规范化形式。

在非规范化形式中,每个组件是介于 0 和 2n - 1 之间的无符号整数值,其中 n 是特定组件的有效位数。如果特定 ColorModel 的像素值表示颜色样本经 alpha 样本预乘,则非规范化颜色组件值也经过预乘。非规范化形式仅用于具有所有组件的最小值为 0.0 和所有组件的最大值为 1.0 的 ColorModel 实例。对于所有规范化组件值都介于 0.0 和 1.0 之间的 ColorModels,非规范化形式可以是一种便捷的表示形式。在这种情况下,整数值 0 映射到 0.0,值 2n - 1 映射到 1.0。在其他情况下,例如当规范化组件值可以是负数或正数时,非规范化形式不方便。这样的 ColorModel 对象在调用涉及非规范化参数的方法时会抛出 IllegalArgumentExceptionColorModel 的子类必须指定发生这种情况的条件。

参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected int
    像素中的总位数。
    protected int
    用于表示像素值的数组的数据类型。

    Fields declared in interface java.awt.Transparency

    BITMASK, OPAQUE, TRANSLUCENT
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
     
    ColorModel(int bits)
    构造一个将指定位数的像素转换为颜色/alpha 组件的 ColorModel
    protected
    ColorModel(int pixel_bits, int[] bits, ColorSpace cspace, boolean hasAlpha, boolean isAlphaPremultiplied, int transparency, int transferType)
    构造一个将像素值转换为颜色/alpha 组件的 ColorModel
  • Method Summary

    Modifier and Type
    Method
    Description
    coerceData(WritableRaster raster, boolean isAlphaPremultiplied)
    强制栅格数据与 isAlphaPremultiplied 变量中指定的状态匹配,假设数据当前由此 ColorModel 正确描述。
    createCompatibleSampleModel(int w, int h)
    创建一个具有与此 ColorModel 兼容的数据布局的指定宽度和高度的 SampleModel
    创建一个具有与此 ColorModel 兼容的数据布局(SampleModel)的指定宽度和高度的 WritableRaster
    boolean
    equals(Object obj)
    该方法简单地委托给 Object 中的默认实现,该实现与一个 == 测试相同,因为此类无法强制执行多个独立子类分支之间的适当相等性测试问题。
    abstract int
    getAlpha(int pixel)
    返回指定像素的 alpha 组件,从 0 到 255 缩放。
    int
    getAlpha(Object inData)
    返回指定像素的 alpha 组件,从 0 到 255 缩放。
    返回从输入 Raster 中提取的图像的 alpha 通道的 Raster,前提是此 ColorModel 的像素值将颜色和 alpha 信息作为单独的空间波段(例如。
    abstract int
    getBlue(int pixel)
    返回默认 RGB ColorSpace sRGB 中指定像素的蓝色颜色分量,从 0 到 255 缩放。
    int
    getBlue(Object inData)
    返回默认 RGB ColorSpace sRGB 中指定像素的蓝色颜色分量,从 0 到 255 缩放。
    final ColorSpace
    返回与此 ColorModel 关联的 ColorSpace
    int[]
    getComponents(int pixel, int[] components, int offset)
    给定此 ColorModel 中的像素,返回一个非规范化的颜色/alpha 组件数组。
    int[]
    getComponents(Object pixel, int[] components, int offset)
    给定此 ColorModel 中的像素,返回一个非规范化的颜色/alpha 组件数组。
    int[]
    返回每个颜色/alpha 组件的位数数组。
    int
    getComponentSize(int componentIdx)
    返回指定颜色/alpha 组件的位数。
    int
    getDataElement(float[] normComponents, int normOffset)
    给定一个规范化的颜色/alpha 组件数组,在此 ColorModel 中返回表示为 int 的像素值。
    int
    getDataElement(int[] components, int offset)
    给定一个非规范化的颜色/alpha 组件数组,在此 ColorModel 中返回表示为 int 的像素值。
    getDataElements(float[] normComponents, int normOffset, Object obj)
    给定一个规范化的颜色/alpha 组件数组,在此 ColorModel 中返回数据元素数组表示的像素。
    getDataElements(int[] components, int offset, Object obj)
    给定一个非规范化的颜色/alpha 组件数组,在此 ColorModel 中返回数据元素数组表示的像素。
    getDataElements(int rgb, Object pixel)
    返回一个数据元素数组表示该ColorModel中像素的整数像素表示形式,使用默认的RGB颜色模型。
    abstract int
    getGreen(int pixel)
    返回指定像素的绿色分量,在默认的RGB ColorSpace(sRGB)中从0到255进行了缩放。
    int
    getGreen(Object inData)
    返回指定像素的绿色分量,在默认的RGB ColorSpace(sRGB)中从0到255进行了缩放。
    float[]
    getNormalizedComponents(int[] components, int offset, float[] normComponents, int normOffset)
    给定一个未标准化的组件数组,返回所有颜色/alpha组件的标准化形式数组。
    float[]
    getNormalizedComponents(Object pixel, float[] normComponents, int normOffset)
    给定该ColorModel中的像素,返回所有颜色/alpha组件的标准化形式数组。
    int
    返回该ColorModel中的颜色组件数量。
    int
    返回该ColorModel中的组件数量,包括alpha。
    int
    返回由该ColorModel描述的每像素位数。
    abstract int
    getRed(int pixel)
    返回指定像素的红色分量,在默认的RGB ColorSpace(sRGB)中从0到255进行了缩放。
    int
    getRed(Object inData)
    返回指定像素的红色分量,在默认的RGB ColorSpace(sRGB)中从0到255进行了缩放。
    int
    getRGB(int pixel)
    返回默认RGB颜色模型格式中像素的颜色/alpha组件。
    int
    getRGB(Object inData)
    返回默认RGB颜色模型格式中指定像素的颜色/alpha组件。
    static ColorModel
    返回一个描述用于AWT图像接口中许多方法的整数RGB值的默认格式的DirectColorModel,方便程序员使用。颜色空间是默认的RGB ColorSpace,即sRGB。假定像素值包括alpha信息。如果颜色和alpha信息在像素值中作为单独的空间带表示,假定颜色带未与alpha值预乘。透明度类型为java.awt.Transparency.TRANSLUCENT。传输类型将是可以容纳单个像素的DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT中最小的类型(如果位数大于32,则为DataBuffer.TYPE_UNDEFINED)。由于此构造函数没有关于每个颜色和alpha组件的位数的信息,因此调用此构造函数的任何子类都应覆盖需要此信息的任何方法。
    final int
    Returns the transfer type of this ColorModel.
    int
    Returns the transparency.
    int[]
    getUnnormalizedComponents(float[] normComponents, int normOffset, int[] components, int offset)
    Returns an array of all of the color/alpha components in unnormalized form, given a normalized component array.
    final boolean
    Returns whether or not alpha is supported in this ColorModel.
    int
    This method simply delegates to the default implementation in Object which returns the system ID for the class.
    final boolean
    Returns whether or not the alpha has been premultiplied in the pixel values to be translated by this ColorModel.
    boolean
    Returns true if raster is compatible with this ColorModel and false if it is not.
    boolean
    Checks if the SampleModel is compatible with this ColorModel.
    Returns the String representation of the contents of this ColorModel object.

    Methods declared in class java.lang.Object

    clone, finalize, getClass, notify, notifyAll, wait, wait, wait
  • Field Details

    • pixel_bits

      protected int pixel_bits
      The total number of bits in the pixel.
    • transferType

      protected int transferType
      Data type of the array used to represent pixel values.
  • Constructor Details

    • ColorModel

      public ColorModel(int bits)
      Constructs a ColorModel that translates pixels of the specified number of bits to color/alpha components. The color space is the default RGB ColorSpace, which is sRGB. Pixel values are assumed to include alpha information. If color and alpha information are represented in the pixel value as separate spatial bands, the color bands are assumed not to be premultiplied with the alpha value. The transparency type is java.awt.Transparency.TRANSLUCENT. The transfer type will be the smallest of DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, or DataBuffer.TYPE_INT that can hold a single pixel (or DataBuffer.TYPE_UNDEFINED if bits is greater than 32). Since this constructor has no information about the number of bits per color and alpha component, any subclass calling this constructor should override any method that requires this information.
      参数:
      bits - 像素的位数
      抛出:
      IllegalArgumentException - 如果bits中的位数少于1
    • ColorModel

      protected ColorModel(int pixel_bits, int[] bits, ColorSpace cspace, boolean hasAlpha, boolean isAlphaPremultiplied, int transparency, int transferType)
      构造一个ColorModel,将像素的值转换为颜色/alpha组件。颜色组件将位于指定的ColorSpace中。pixel_bits是像素值中的位数。bits数组指定每个颜色和alpha组件的有效位数。如果像素值中没有alpha信息,则其长度应为ColorSpace中组件的数量,如果有alpha信息,则应比此数量多一个。 hasAlpha指示是否存在alpha信息。布尔值isAlphaPremultiplied指定如何解释颜色和alpha信息分别表示为单独的空间带的像素值。如果布尔值为true,则假定颜色样本已乘以alpha样本。 transparency指定此颜色模型可以表示哪些alpha值。传输类型是用于表示像素值的原始数组的类型。请注意,bits数组包含从像素值转换后每个颜色/alpha组件的有效位数。例如,对于IndexColorModelpixel_bits等于16,bits数组可能有四个元素,每个元素设置为8。
      参数:
      pixel_bits - 像素值中的位数
      bits - 指定每个颜色和alpha组件的有效位数的数组
      cspace - 指定的ColorSpace
      hasAlpha - 如果存在alpha信息,则为true;否则为false
      isAlphaPremultiplied - 如果颜色样本假定已乘以alpha样本,则为true;否则为false
      transparency - 此颜色模型可以表示哪些alpha值
      transferType - 用于表示像素值的数组的类型
      抛出:
      IllegalArgumentException - 如果位数组的长度小于此ColorModel中的颜色或alpha组件的数量,或者透明度不是有效值。
      IllegalArgumentException - 如果bits中位数的总和小于1,或者bits中的任何元素小于0。
      参见:
  • Method Details

    • getRGBdefault

      public static ColorModel getRGBdefault()
      返回一个描述用于AWT图像接口中许多方法的整数RGB值的默认格式的DirectColorModel。颜色空间是默认的ColorSpace,sRGB。RGB值的格式是一个整数,每个颜色分量(alpha、红、绿和蓝)各有8位,从最高有效字节到最低有效字节依次排序,如:0xAARRGGBB。颜色分量未经alpha分量预乘。此格式不一定代表特定设备或所有图像的本机或最有效的ColorModel。它仅用作通用的颜色模型格式。
      返回:
      描述默认RGB值的DirectColorModel对象。
    • hasAlpha

      public final boolean hasAlpha()
      返回是否在此ColorModel中支持alpha。
      返回:
      如果在此ColorModel中支持alpha,则为true;否则为false
    • isAlphaPremultiplied

      public final boolean isAlphaPremultiplied()
      返回是否在要由此ColorModel转换的像素值中alpha已经预乘。如果布尔值为true,则应使用此ColorModel来解释颜色和alpha信息分别表示为单独的空间带的像素值,并且假定颜色样本已乘以alpha样本。
      返回:
      如果要由此ColorModel转换的像素值中alpha值已经预乘,则为true;否则为false
    • getTransferType

      public final int getTransferType()
      返回此ColorModel的传输类型。传输类型是用于表示像素值的原始数组的类型。
      返回:
      传输类型。
      自:
      1.3
    • getPixelSize

      public int getPixelSize()
      返回由此ColorModel描述的每像素位数。
      返回:
      每像素位数。
    • getComponentSize

      public int getComponentSize(int componentIdx)
      返回指定颜色/alpha组件的位数。颜色组件按ColorSpace指定的顺序进行索引。通常,此顺序反映颜色空间类型的名称。例如,对于TYPE_RGB,索引0对应于红色,索引1对应于绿色,索引2对应于蓝色。如果此ColorModel支持alpha,则alpha组件对应于最后一个颜色组件之后的索引。
      参数:
      componentIdx - 颜色/alpha组件的索引
      返回:
      指定索引处颜色/alpha组件的位数。
      抛出:
      ArrayIndexOutOfBoundsException - 如果componentIdx大于或等于组件数量或小于零
      NullPointerException - 如果位数数组为null
    • getComponentSize

      public int[] getComponentSize()
      返回每个颜色/alpha组件的位数数组。数组按ColorSpace指定的顺序包含颜色组件,然后是alpha组件(如果存在)。
      返回:
      包含每个颜色/alpha组件的位数的数组
    • getTransparency

      public int getTransparency()
      返回透明度。返回OPAQUE、BITMASK或TRANSLUCENT之一。
      指定者:
      getTransparency 在接口 Transparency
      返回值:
      ColorModel的透明度。
      另请参阅:
    • getNumComponents

      public int getNumComponents()
      返回此ColorModel中包括alpha在内的组件数。如果有alpha组件,则这等于颜色组件的数量,可选地再加一。
      返回值:
      ColorModel中的组件数
    • getNumColorComponents

      public int getNumColorComponents()
      返回此ColorModel中的颜色组件数。这是由ColorSpace.getNumComponents()返回的组件数量。
      返回值:
      ColorModel中的颜色组件数。
      另请参阅:
    • getRed

      public abstract int getRed(int pixel)
      返回指定像素的红色颜色分量,范围从0到255,默认RGB ColorSpace(sRGB)。如果需要,将进行颜色转换。像素值指定为int。如果此ColorModel的像素值不能方便地表示为单个int,则会抛出IllegalArgumentException。返回的值不是预乘值。例如,如果alpha是预乘的,则此方法在返回值之前将其除去。如果alpha值为0,则红色值为0。
      参数:
      pixel - 指定的像素
      返回值:
      指定像素的红色分量的值。
    • getGreen

      public abstract int getGreen(int pixel)
      返回指定像素的绿色颜色分量,范围从0到255,默认RGB ColorSpace(sRGB)。如果需要,将进行颜色转换。像素值指定为int。如果此ColorModel的像素值不能方便地表示为单个int,则会抛出IllegalArgumentException。返回的值是非预乘值。例如,如果alpha是预乘的,则此方法在返回值之前将其除去。如果alpha值为0,则绿色值为0。
      参数:
      pixel - 指定的像素
      返回值:
      指定像素的绿色分量的值。
    • getBlue

      public abstract int getBlue(int pixel)
      返回指定像素的蓝色颜色分量,范围从0到255,默认RGB ColorSpace(sRGB)。如果需要,将进行颜色转换。像素值指定为int。如果此ColorModel的像素值不能方便地表示为单个int,则会抛出IllegalArgumentException。返回的值是非预乘值,例如,如果alpha是预乘的,则此方法在返回值之前将其除去。如果alpha值为0,则蓝色值为0。
      参数:
      pixel - 指定的像素
      返回值:
      指定像素的蓝色分量的值。
    • getAlpha

      public abstract int getAlpha(int pixel)
      返回指定像素的alpha分量,范围从0到255。像素值指定为int。如果此ColorModel的像素值不能方便地表示为单个int,则会抛出IllegalArgumentException
      参数:
      pixel - 指定的像素
      返回值:
      指定像素的alpha分量的值。
    • getRGB

      public int getRGB(int pixel)
      返回默认RGB颜色模型格式中像素的颜色/alpha组件。如果需要,将进行颜色转换。像素值指定为int。如果此ColorModel的像素值不能方便地表示为单个int,则会抛出IllegalArgumentException。返回的值是非预乘格式。例如,如果alpha是预乘的,则此方法将其除去颜色分量。如果alpha值为0,则颜色值为0。
      参数:
      pixel - 指定的像素
      返回值:
      指定像素的颜色/alpha组件的RGB值。
      另请参阅:
    • getRed

      public int getRed(Object inData)
      返回默认RGB ColorSpace(sRGB)中指定像素的红色颜色分量,范围从0到255。如果需要,将进行颜色转换。像素值由传递为对象引用的transferType类型的数据元素数组指定。返回的值是非预乘值。例如,如果alpha是预乘的,则此方法在返回值之前将其除去。如果alpha值为0,则红色值为0。如果inData不是类型为transferType的原始数组,则会抛出ClassCastException。如果inData不足以容纳此ColorModel的像素值,则会抛出ArrayIndexOutOfBoundsException。如果不支持此transferType,则会抛出UnsupportedOperationException。由于ColorModel是一个抽象类,任何实例必须是子类的实例。子类继承此方法的实现,如果不重写它,则如果子类使用的transferType不是DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT,则此方法会抛出异常。
      参数:
      inData - 像素值数组
      返回值:
      指定像素的红色分量的值。
      抛出:
      ClassCastException - 如果inData不是类型为transferType的原始数组
      ArrayIndexOutOfBoundsException - 如果inData不足以容纳此ColorModel的像素值
      UnsupportedOperationException - 如果不支持此transferType
    • getGreen

      public int getGreen(Object inData)
      返回默认RGB ColorSpace(sRGB)中指定像素的绿色颜色分量,范围从0到255。如果需要,将进行颜色转换。像素值由传递为对象引用的transferType类型的数据元素数组指定。返回的值是非预乘值。例如,如果alpha是预乘的,则此方法在返回值之前将其除去。如果alpha值为0,则绿色值为0。如果inData不是类型为transferType的原始数组,则会抛出ClassCastException。如果inData不足以容纳此ColorModel的像素值,则会抛出ArrayIndexOutOfBoundsException。如果不支持此transferType,则会抛出UnsupportedOperationException。由于ColorModel是一个抽象类,任何实例必须是子类的实例。子类继承此方法的实现,如果不重写它,则如果子类使用的transferType不是DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT,则此方法会抛出异常。
      参数:
      inData - 像素值数组
      返回值:
      指定像素的绿色分量的值。
      抛出:
      ClassCastException - 如果inData不是类型为transferType的原始数组
      ArrayIndexOutOfBoundsException - 如果inData不足以容纳此ColorModel的像素值
      UnsupportedOperationException - 如果不支持此transferType
    • getBlue

      public int getBlue(Object inData)
      返回默认RGB ColorSpace(sRGB)中指定像素的蓝色颜色分量,范围从0到255。如果需要,将进行颜色转换。像素值由传递为对象引用的transferType类型的数据元素数组指定。返回的值是非预乘值。例如,如果alpha是预乘的,则此方法在返回值之前将其除去。如果alpha值为0,则蓝色值为0。如果inData不是类型为transferType的原始数组,则会抛出ClassCastException。如果inData不足以容纳此ColorModel的像素值,则会抛出ArrayIndexOutOfBoundsException。如果不支持此transferType,则会抛出UnsupportedOperationException。由于ColorModel是一个抽象类,任何实例必须是子类的实例。子类继承此方法的实现,如果不重写它,则如果子类使用的transferType不是DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT,则此方法会抛出异常。
      参数:
      inData - 像素值数组
      返回:
      指定像素的蓝色分量值。
      抛出:
      ClassCastException - 如果inData不是类型为transferType的原始数组
      ArrayIndexOutOfBoundsException - 如果inData不足以容纳此ColorModel的像素值
      UnsupportedOperationException - 如果此ColorModel不支持此transferType
    • getAlpha

      public int getAlpha(Object inData)
      返回指定像素的alpha分量,范围从0到255。像素值由作为对象引用传递的transferType类型的数据元素数组inData指定。如果inData不是类型为transferType的原始数组,则会抛出ClassCastException。如果inData不足以容纳此ColorModel的像素值,则会抛出ArrayIndexOutOfBoundsException。如果不支持此transferType,则会抛出UnsupportedOperationException。由于ColorModel是一个抽象类,任何实例必须是子类的实例。子类继承此方法的实现,如果不重写,则在子类使用transferTypeDataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT之外的值时,此方法会抛出异常。
      参数:
      inData - 指定的像素
      返回:
      指定像素的alpha分量,范围从0到255。
      抛出:
      ClassCastException - 如果inData不是类型为transferType的原始数组
      ArrayIndexOutOfBoundsException - 如果inData不足以容纳此ColorModel的像素值
      UnsupportedOperationException - 如果不支持此transferType
    • getRGB

      public int getRGB(Object inData)
      返回默认RGB颜色模型格式中指定像素的颜色/alpha分量。必要时进行颜色转换。像素值由作为对象引用传递的transferType类型的数据元素数组inData指定。如果inData不是类型为transferType的原始数组,则会抛出ClassCastException。如果inData不足以容纳此ColorModel的像素值,则会抛出ArrayIndexOutOfBoundsException。返回值将以非预乘格式返回,即如果alpha已经预乘,则此方法将从颜色分量中除去alpha(如果alpha值为0,则颜色值将为0)。
      参数:
      inData - 指定的像素
      返回:
      指定像素的颜色和alpha分量。
      参见:
    • getDataElements

      public Object getDataElements(int rgb, Object pixel)
      返回此ColorModel中像素的数据元素数组表示,给定默认RGB颜色模型中的整数像素表示。然后可以将此数组传递给WritableRaster对象的WritableRaster.setDataElements(int, int, java.lang.Object)方法。如果像素变量为null,将分配一个新数组。如果pixel不为null,则必须是类型为transferType的原始数组;否则将抛出ClassCastException。如果pixel不足以容纳此ColorModel的像素值,则将抛出ArrayIndexOutOfBoundsException。将返回像素数组。如果不支持此transferType,则将抛出UnsupportedOperationException。由于ColorModel是一个抽象类,任何实例都是子类的实例。子类必须重写此方法,因为此抽象类中的实现会抛出UnsupportedOperationException
      参数:
      rgb - 默认RGB颜色模型中的整数像素表示
      pixel - 指定的像素
      返回:
      ColorModel中指定像素的数组表示。
      抛出:
      ClassCastException - 如果pixel不是类型为transferType的原始数组
      ArrayIndexOutOfBoundsException - 如果pixel不足以容纳此ColorModel的像素值
      UnsupportedOperationException - 如果不支持此方法
      参见:
    • getComponents

      public int[] getComponents(int pixel, int[] components, int offset)
      返回此ColorModel中给定像素的非规范化颜色/alpha分量数组。像素值以int形式指定。如果此ColorModel的像素值不能方便地表示为单个int,或者如果此ColorModel的颜色分量值在非规范化形式中不能方便地表示,则会抛出IllegalArgumentException。例如,此方法可用于检索DirectColorModel中特定像素值的组件。如果组件数组为null,将分配一个新数组。将返回组件数组。颜色/alpha组件存储在从offset开始的组件数组中(即使此方法分配了数组)。如果组件数组不为null且不足以容纳所有颜色和alpha组件(从offset开始),则会抛出ArrayIndexOutOfBoundsException。由于ColorModel是一个抽象类,任何实例都是子类的实例。子类必须重写此方法,因为此抽象类中的实现会抛出UnsupportedOperationException
      参数:
      pixel - 指定的像素
      components - 用于接收指定像素的颜色和alpha分量的数组
      offset - 开始存储指定像素的颜色和alpha分量的components数组中的偏移量
      返回:
      包含从指定偏移量开始的指定像素的颜色和alpha分量的数组。
      抛出:
      UnsupportedOperationException - 如果不支持此方法
    • getComponents

      public int[] getComponents(Object pixel, int[] components, int offset)
      返回此ColorModel中给定像素的非规范化颜色/alpha分量数组。像素值由作为对象引用传递的transferType类型的数据元素数组pixel指定。如果pixel不是类型为transferType的原始数组,则会抛出ClassCastException。如果此ColorModel的颜色分量值在非规范化形式中不能方便地表示,则会抛出IllegalArgumentException。如果pixel不足以容纳此ColorModel的像素值,则将抛出ArrayIndexOutOfBoundsException。此方法可用于检索任何ColorModel中特定像素值的组件。如果组件数组为null,将分配一个新数组。将返回组件数组。颜色/alpha组件存储在components数组中从offset开始的位置(即使此方法分配了数组)。如果组件数组不为null且不足以容纳所有颜色和alpha组件(从offset开始),则会抛出ArrayIndexOutOfBoundsException。由于ColorModel是一个抽象类,任何实例都是子类的实例。子类必须重写此方法,因为此抽象类中的实现会抛出UnsupportedOperationException
      参数:
      pixel - 指定的像素
      components - 用于接收指定像素的颜色和alpha分量的数组
      offset - 开始存储指定像素的颜色和alpha分量的components数组中的索引
      返回:
      包含从指定偏移量开始的指定像素的颜色和alpha分量的数组。
      抛出:
      UnsupportedOperationException - 如果不支持此方法
    • getUnnormalizedComponents

      public int[] getUnnormalizedComponents(float[] normComponents, int normOffset, int[] components, int offset)
      返回一个未标准化形式的颜色/alpha分量数组,给定一个标准化的分量数组。未标准化的分量是介于 0 和 2n - 1 之间的无符号整数值,其中 n 是特定分量的位数。标准化的分量是浮点值,介于由此 ColorModelColorSpace 对象指定的每个分量的最小值和最大值之间。如果此 ColorModel 的颜色分量值在未标准化形式下不方便表示,则会抛出 IllegalArgumentException。如果 components 数组为 null,将分配一个新数组。将返回 components 数组。颜色/alpha 分量存储在从 offset 开始的 components 数组中(即使该数组是由此方法分配的)。如果 components 数组不为 null 并且不足以容纳所有颜色和 alpha 分量(从 offset 开始),则会抛出 ArrayIndexOutOfBoundsException。如果 normComponents 数组不足以容纳从 normOffset 开始的所有颜色和 alpha 分量,则会抛出 IllegalArgumentException
      参数:
      normComponents - 包含标准化分量的数组
      normOffset - 开始检索标准化分量的 normComponents 数组中的偏移量
      components - 从 normComponents 接收分量的数组
      offset - 从 normComponents 开始存储标准化分量的 components 中的索引
      返回:
      包含未标准化颜色和 alpha 分量的数组。
      抛出:
      IllegalArgumentException - 如果此 ColorModel 的分量值在未标准化形式下不方便表示。
      IllegalArgumentException - 如果 normComponents 的长度减去 normOffset 小于 numComponents
      UnsupportedOperationException - 如果此 ColorModel 的构造函数调用了 super(bits) 构造函数,但未覆盖此方法。请参阅构造函数,ColorModel(int)
    • getNormalizedComponents

      public float[] getNormalizedComponents(int[] components, int offset, float[] normComponents, int normOffset)
      返回一个标准化形式的颜色/alpha分量数组,给定一个未标准化的分量数组。未标准化的分量是介于 0 和 2n - 1 之间的无符号整数值,其中 n 是特定分量的位数。标准化的分量是浮点值,介于由此 ColorModelColorSpace 对象指定的每个分量的最小值和最大值之间。如果此 ColorModel 的颜色分量值在未标准化形式下不方便表示,则会抛出 IllegalArgumentException。如果 normComponents 数组为 null,将分配一个新数组。将返回 normComponents 数组。颜色/alpha 分量存储在从 normOffset 开始的 normComponents 数组中(即使该数组是由此方法分配的)。如果 normComponents 数组不为 null 并且不足以容纳所有颜色和 alpha 分量(从 normOffset 开始),则会抛出 ArrayIndexOutOfBoundsException。如果 components 数组不足以容纳从 offset 开始的所有颜色和 alpha 分量,则会抛出 IllegalArgumentException

      由于 ColorModel 是一个抽象类,任何实例都是子类的实例。在此抽象类中,此方法的默认实现假定此类的分量值在未标准化形式下是方便表示的。因此,可能存在不支持未标准化形式的实例的子类必须覆盖此方法。

      参数:
      components - 包含未标准化分量的数组
      offset - 开始检索未标准化分量的 components 数组中的偏移量
      normComponents - 从 components 接收标准化分量的数组
      normOffset - 从 normComponents 开始存储标准化分量的 components 中的索引
      返回:
      包含标准化颜色和 alpha 分量的数组。
      抛出:
      IllegalArgumentException - 如果此 ColorModel 的分量值在未标准化形式下不方便表示。
      UnsupportedOperationException - 如果此 ColorModel 的构造函数调用了 super(bits) 构造函数,但未覆盖此方法。请参阅构造函数,ColorModel(int)
      UnsupportedOperationException - 如果此方法无法确定每个分量的位数
    • getDataElement

      public int getDataElement(int[] components, int offset)
      返回在此 ColorModel 中表示为 int 的像素值,给定一个未标准化颜色/alpha分量数组。如果此 ColorModel 的分量值不方便表示为单个 int,或者如果此 ColorModel 的颜色分量值在未标准化形式下不方便表示,则此方法将抛出 IllegalArgumentException。如果 components 数组不足以容纳所有颜色和 alpha 分量(从 offset 开始),则会抛出 ArrayIndexOutOfBoundsException。由于 ColorModel 是一个抽象类,任何实例都是子类的实例。由于此抽象类中的实现会抛出 UnsupportedOperationException,因此子类必须覆盖此方法。
      参数:
      components - 未标准化颜色和 alpha 分量的数组
      offset - 开始检索颜色和 alpha 分量的 components 中的索引
      返回:
      在此 ColorModel 中对应于指定分量的 int 像素值。
      抛出:
      IllegalArgumentException - 如果此 ColorModel 的像素值不方便表示为单个 int
      IllegalArgumentException - 如果此 ColorModel 的分量值在未标准化形式下不方便表示
      ArrayIndexOutOfBoundsException - 如果 components 数组不足以容纳从 offset 开始的所有颜色和 alpha 分量
      UnsupportedOperationException - 如果此 ColorModel 不支持此方法
    • getDataElements

      public Object getDataElements(int[] components, int offset, Object obj)
      返回在此 ColorModel 中表示为数据元素数组的像素值,给定一个未标准化颜色/alpha分量数组。然后,可以将此数组传递给 WritableRaster 对象的 setDataElements 方法。如果此 ColorModel 的颜色分量值在未标准化形式下不方便表示,则会抛出 IllegalArgumentException。如果 components 数组不足以容纳所有颜色和 alpha 分量(从 offset 开始),则会抛出 ArrayIndexOutOfBoundsException。如果 obj 变量为 null,将分配一个新数组。如果 obj 不为 null,它必须是类型为 transferType 的原始数组;否则,将抛出 ClassCastException。如果 obj 不足以容纳此 ColorModel 的像素值,则会抛出 ArrayIndexOutOfBoundsException。由于 ColorModel 是一个抽象类,任何实例都是子类的实例。由于此抽象类中的实现会抛出 UnsupportedOperationException,因此子类必须覆盖此方法。
      参数:
      components - 未规范化的颜色和alpha分量数组
      offset - 开始检索颜色和alpha分量的components数组中的索引
      obj - 表示颜色和alpha分量数组的Object
      返回:
      代表颜色和alpha分量数组的Object
      抛出:
      ClassCastException - 如果obj不是类型为transferType的原始数组
      ArrayIndexOutOfBoundsException - 如果obj不足以容纳此ColorModel的像素值,或者components数组不足以容纳从offset开始的所有颜色和alpha分量
      IllegalArgumentException - 如果此ColorModel的分量值在未规范化形式下不方便表示
      UnsupportedOperationException - 如果此方法不受此ColorModel支持
      参见:
    • getDataElement

      public int getDataElement(float[] normComponents, int normOffset)
      返回一个以int表示的像素值,给定一个规范化颜色/alpha分量数组在此ColorModel中。如果此ColorModel的像素值不方便表示为单个int,则会抛出IllegalArgumentException。如果normComponents数组不足以容纳所有颜色和alpha分量(从normOffset开始),则会抛出ArrayIndexOutOfBoundsException。由于ColorModel是一个抽象类,任何实例都是子类的实例。此抽象类中此方法的默认实现首先从规范化形式转换为未规范化形式,然后调用getDataElement(int[], int)。可能存在不支持未规范化形式的子类必须覆盖此方法。
      参数:
      normComponents - 规范化颜色和alpha分量数组
      normOffset - 开始检索颜色和alpha分量的normComponents数组中的索引
      返回:
      在此ColorModel中对应于指定分量的int像素值。
      抛出:
      IllegalArgumentException - 如果此ColorModel的像素值不方便表示为单个int
      ArrayIndexOutOfBoundsException - 如果normComponents数组不足以容纳从normOffset开始的所有颜色和alpha分量
      自1.4版本起:
      1.4
    • getDataElements

      public Object getDataElements(float[] normComponents, int normOffset, Object obj)
      返回此ColorModel中像素的数据元素数组表示,给定一个规范化颜色/alpha分量数组。然后可以将此数组传递给WritableRaster对象的setDataElements方法。如果normComponents数组不足以容纳所有颜色和alpha分量(从normOffset开始),则会抛出ArrayIndexOutOfBoundsException。如果obj变量为null,将分配一个新数组。如果obj不为null,它必须是类型为transferType的原始数组;否则,将抛出ClassCastException。如果obj不足以容纳此ColorModel的像素值,则会抛出ArrayIndexOutOfBoundsException。由于ColorModel是一个抽象类,任何实例都是子类的实例。此抽象类中此方法的默认实现首先从规范化形式转换为未规范化形式,然后调用getDataElement(int[], int, Object)。可能存在不支持未规范化形式的子类必须覆盖此方法。
      参数:
      normComponents - 规范化颜色和alpha分量数组
      normOffset - 开始检索颜色和alpha分量的normComponents数组中的索引
      obj - 用于保存返回像素的原始数据数组
      返回:
      一个代表像素的原始数据数组的Object
      抛出:
      ClassCastException - 如果obj不是类型为transferType的原始数组
      ArrayIndexOutOfBoundsException - 如果obj不足以容纳此ColorModel的像素值,或者normComponents数组不足以容纳从normOffset开始的所有颜色和alpha分量
      自1.4版本起:
      1.4
      参见:
    • getNormalizedComponents

      public float[] getNormalizedComponents(Object pixel, float[] normComponents, int normOffset)
      返回一个以规范化形式表示的所有颜色/alpha分量的数组,给定此ColorModel中的像素。像素值由作为对象引用传递的transferType类型的数据元素数组的数组指定。如果像素不是类型为transferType的原始数组,则会抛出ClassCastException。如果pixel不足以容纳此ColorModel的像素值,则会抛出ArrayIndexOutOfBoundsException。规范化分量是介于由此ColorModelColorSpace对象指定的每个分量最小值和最大值之间的浮点值。如果normComponents数组为null,将分配一个新数组。将返回normComponents数组。颜色/alpha分量存储在从normOffset开始的normComponents数组中(即使此方法分配数组)。如果normComponents数组不为null且不足以容纳所有颜色和alpha分量(从normOffset开始),则会抛出ArrayIndexOutOfBoundsException。由于ColorModel是一个抽象类,任何实例都是子类的实例。此抽象类中此方法的默认实现首先使用getComponents(Object, int[], int)从未规范化形式中检索颜色和alpha分量,然后调用getNormalizedComponents(int[], int, float[], int)。可能存在不支持未规范化形式的子类必须覆盖此方法。
      参数:
      pixel - 指定的像素
      normComponents - 用于接收规范化分量的数组
      normOffset - 开始存储规范化分量的normComponents数组中的偏移量
      返回:
      包含规范化颜色和alpha分量的数组。
      抛出:
      ClassCastException - 如果pixel不是类型为transferType的原始数组
      ArrayIndexOutOfBoundsException - 如果normComponents不足以容纳从normOffset开始的所有颜色和alpha分量
      ArrayIndexOutOfBoundsException - 如果pixel不足以容纳此ColorModel的像素值
      UnsupportedOperationException - 如果此ColorModel的构造函数调用了super(bits)构造函数,但未覆盖此方法。请参阅构造函数,ColorModel(int)
      UnsupportedOperationException - 如果此方法无法确定每个分量的位数
      自1.4版本起:
      1.4
    • equals

      public boolean equals(Object obj)
      此方法简单地委托给Object中的默认实现,该实现与==测试相同,因为此类无法强制执行对多个独立子类分支的适当相等性测试的问题。鼓励子类覆盖此方法,并为自己的属性提供相等性测试,以及为以下ColorModel的常见基本属性提供相等性测试:
      • 支持alpha分量。
      • 是否alpha预乘。
      • 每像素位数。
      • 透明度类型,如不透明、位掩码或半透明。
      • 每像素组件数。
      • ColorSpace类型。
      • 用于表示像素值的数组类型。
      • 每个颜色和alpha分量的有效位数。
      覆盖:
      equals 在类 Object
      参数:
      obj - 用于比较的引用对象。
      返回:
      如果此对象与obj参数相同,则返回true; 否则返回false
      参见:
    • hashCode

      public int hashCode()
      此方法简单地委托给Object中的默认实现,该实现返回类的系统ID。鼓励子类覆盖此方法,并为自己的属性提供哈希值,以及为ColorModel的以下常见基本属性的值进行哈希处理:
      • 支持alpha分量。
      • 是否alpha预乘。
      • 每像素的位数。
      • 透明度类型,如Opaque、Bitmask或Translucent。
      • 每像素的组件数。
      • ColorSpace类型。
      • 用于表示像素值的数组类型。
      • 每个颜色和alpha分量的有效位数。
      覆盖:
      hashCode 在类 Object
      返回:
      此对象的哈希码值。
      参见:
    • getColorSpace

      public final ColorSpace getColorSpace()
      返回与此ColorModel关联的ColorSpace
      返回:
      ColorModelColorSpace
    • coerceData

      public ColorModel coerceData(WritableRaster raster, boolean isAlphaPremultiplied)
      强制栅格数据与isAlphaPremultiplied变量指定的状态匹配,假设数据当前由此ColorModel正确描述。它可能通过alpha乘法或除法来处理颜色栅格数据,或者如果数据处于正确状态,则不执行任何操作。如果数据需要强制转换,此方法还将返回一个适当设置isAlphaPremultiplied标志的此ColorModel的实例。如果此ColorModel不支持此操作,此方法将抛出UnsupportedOperationException。由于ColorModel是一个抽象类,任何实例都是子类的实例。子类必须覆盖此方法,因为此抽象类中的实现会抛出UnsupportedOperationException
      参数:
      raster - WritableRaster数据
      isAlphaPremultiplied - 如果alpha已预乘,则为true; 否则为false
      返回:
      代表强制数据的ColorModel对象。
    • isCompatibleRaster

      public boolean isCompatibleRaster(Raster raster)
      如果raster与此ColorModel兼容,则返回true;否则返回false。由于ColorModel是一个抽象类,任何实例都是子类的实例。子类必须覆盖此方法,因为此抽象类中的实现会抛出UnsupportedOperationException
      参数:
      raster - 要测试兼容性的Raster对象
      返回:
      如果raster与此ColorModel兼容,则返回true
      抛出:
      UnsupportedOperationException - 如果此ColorModel未实现此方法
    • createCompatibleWritableRaster

      public WritableRaster createCompatibleWritableRaster(int w, int h)
      创建一个具有指定宽度和高度的WritableRaster,其数据布局(SampleModel)与此ColorModel兼容。由于ColorModel是一个抽象类,任何实例都是子类的实例。子类必须覆盖此方法,因为此抽象类中的实现会抛出UnsupportedOperationException
      参数:
      w - 应用于新WritableRaster的宽度
      h - 应用于新WritableRaster的高度
      返回:
      具有指定宽度和高度的WritableRaster对象。
      抛出:
      UnsupportedOperationException - 如果此ColorModel不支持此方法
      参见:
    • createCompatibleSampleModel

      public SampleModel createCompatibleSampleModel(int w, int h)
      创建一个具有指定宽度和高度的SampleModel,其数据布局与此ColorModel兼容。由于ColorModel是一个抽象类,任何实例都是子类的实例。子类必须覆盖此方法,因为此抽象类中的实现会抛出UnsupportedOperationException
      参数:
      w - 应用于新SampleModel的宽度
      h - 应用于新SampleModel的高度
      返回:
      具有指定宽度和高度的SampleModel对象。
      抛出:
      UnsupportedOperationException - 如果此ColorModel不支持此方法
      参见:
    • isCompatibleSampleModel

      public boolean isCompatibleSampleModel(SampleModel sm)
      检查SampleModel是否与此ColorModel兼容。由于ColorModel是一个抽象类,任何实例都是子类的实例。子类必须覆盖此方法,因为此抽象类中的实现会抛出UnsupportedOperationException
      参数:
      sm - 指定的SampleModel
      返回:
      如果指定的SampleModel与此ColorModel兼容,则返回true;否则返回false
      抛出:
      UnsupportedOperationException - 如果此ColorModel不支持此方法
      参见:
    • getAlphaRaster

      public WritableRaster getAlphaRaster(WritableRaster raster)
      返回表示图像的alpha通道的Raster,从输入Raster中提取,前提是此ColorModel的像素值将颜色和alpha信息作为单独的空间波段表示(例如ComponentColorModelDirectColorModel)。此方法假定与此ColorModel关联的Raster对象将alpha通道(如果存在)存储为图像数据的最后一个波段。如果没有与此ColorModel关联的单独的空间alpha通道,则返回null。如果这是具有查找表中alpha的IndexColorModel,此方法将返回null,因为没有空间上离散的alpha通道。此方法将创建一个新的Raster(但将共享数据数组)。由于ColorModel是一个抽象类,任何实例都是子类的实例。子类必须覆盖此方法,以获得除返回null之外的任何行为,因为此抽象类中的实现返回null
      参数:
      raster - 指定的Raster
      返回:
      从指定的Raster中获取表示图像的alpha通道的Raster
    • toString

      public String toString()
      返回此ColorModel对象内容的String表示形式。
      覆盖:
      toString 在类 Object
      返回:
      表示此ColorModel对象内容的String