Module java.desktop
Package java.awt.image

Class DirectColorModel

所有已实现的接口:
透明度

public class DirectColorModel extends PackedColorModel
DirectColorModel类是一个与表示RGB颜色和alpha信息为单独样本的像素值一起工作的ColorModel类,并将单个像素的所有样本打包到单个int、short或byte数量中。此类只能与ColorSpaces类型为ColorSpace.TYPE_RGB一起使用。此外,对于ColorSpace的每个组件,通过ColorSpace的getMinValue()方法获得的最小归一化组件值必须为0.0,通过getMaxValue()方法获得的最大值必须为1.0(这些最小/最大值对于RGB空间是典型的)。像素值中必须有三个颜色样本,可以有一个单独的alpha样本。对于使用transferType类型的原始数组像素表示的方法,数组长度始终为1。支持的传输类型为DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT和DataBuffer.TYPE_INT。颜色和alpha样本存储在数组的单个元素中,位掩码指示的位。每个位掩码必须是连续的,且掩码不能重叠。相同的掩码适用于其他方法使用的单个int像素表示。掩码和颜色/alpha样本的对应关系如下:
  • 如果没有alpha存在,则通过索引从0到2进行标识掩码,如果存在alpha,则为3。
  • 前三个索引指的是颜色样本;索引0对应红色,索引1对应绿色,索引2对应蓝色。
  • 索引3对应alpha样本,如果存在。

从像素值到颜色/alpha组件的显示或处理目的的转换是样本到组件的一对一对应关系。通常,DirectColorModel与使用掩码定义打包样本的图像数据一起使用。例如,DirectColorModel可以与SinglePixelPackedSampleModel结合使用以构造BufferedImage。通常,SampleModelColorModel使用的掩码将是相同的。但是,如果它们不同,则将根据ColorModel的掩码执行像素数据的颜色解释。

单个int像素表示对于此类的所有对象都是有效的,因为始终可以将与此类一起使用的像素值表示为单个int。因此,使用此表示的方法不会因为无效的像素值而抛出IllegalArgumentException

此颜色模型类似于X11 TrueColor视觉。由getRGBdefault方法指定的默认RGB ColorModel是具有以下参数的DirectColorModel

 位数:        32
 红色掩码:    0x00ff0000
 绿色掩码:    0x0000ff00
 蓝色掩码:    0x000000ff
 Alpha掩码:  0xff000000
 颜色空间:    sRGB
 是否预乘Alpha:  False
 透明度:      Transparency.TRANSLUCENT
 传输类型:    DataBuffer.TYPE_INT
 

此类中的许多方法都是final的。这是因为底层本机图形代码对此类的布局和操作做出了假设,并且这些假设反映在这里标记为final的方法的实现中。您可以为其他原因对此类进行子类化,但不能覆盖或修改这些方法的行为。

参见:
  • Constructor Details

    • DirectColorModel

      public DirectColorModel(int bits, int rmask, int gmask, int bmask)
      从指定的掩码中构造一个DirectColorModel,指示一个int像素表示中包含红色、绿色和蓝色样本的位。由于像素值不包含alpha信息,因此所有像素都被视为不透明,这意味着alpha = 1.0。每个掩码中的所有位必须是连续的,并且适合于int像素表示的指定数量的最低有效位。颜色空间是默认的sRGB空间。透明度值为Transparency.OPAQUE。传输类型是DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT中可以容纳单个像素的最小类型。
      参数:
      bits - 像素值中的位数;例如,掩码中位数的总和。
      rmask - 指定一个掩码,指示整数像素中包含红色分量的位
      gmask - 指定一个掩码,指示整数像素中包含绿色分量的位
      bmask - 指定一个掩码,指示整数像素中包含蓝色分量的位
    • DirectColorModel

      public DirectColorModel(int bits, int rmask, int gmask, int bmask, int amask)
      从指定的掩码中构造一个DirectColorModel,指示一个int像素表示中包含红色、绿色和蓝色样本以及alpha样本的位,如果存在的话。如果amask为0,则像素值不包含alpha信息,所有像素都被视为不透明,这意味着alpha = 1.0。每个掩码中的所有位必须是连续的,并且适合于int像素表示的指定数量的最低有效位。如果存在alpha,则alpha不是预乘的。颜色空间是默认的sRGB空间。透明度值为如果没有alpha存在,则Transparency.OPAQUE,否则为Transparency.TRANSLUCENT。传输类型是DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT中可以容纳单个像素的最小类型。
      参数:
      bits - 像素值中的位数;例如,掩码中位数的总和。
      rmask - 指定一个掩码,指示整数像素中包含红色分量的位
      gmask - 指定一个掩码,指示整数像素中包含绿色分量的位
      bmask - 指定一个掩码,指示整数像素中包含蓝色分量的位
      amask - 指定一个掩码,指示整数像素中包含alpha分量的位
    • DirectColorModel

      public DirectColorModel(ColorSpace space, int bits, int rmask, int gmask, int bmask, int amask, boolean isAlphaPremultiplied, int transferType)
      从指定的参数构造一个DirectColorModel。颜色分量在指定的ColorSpace中,该颜色空间必须是ColorSpace.TYPE_RGB类型,并且具有所有最小规范化分量值为0.0和所有最大值为1.0。掩码指定int像素表示中包含红色、绿色和蓝色颜色样本以及alpha样本(如果存在)的位。如果amask为0,则像素值不包含alpha信息,并且所有像素都被视为不透明,这意味着alpha = 1.0。每个掩码中的所有位必须是连续的,并且适合于int像素表示的指定数量的最低有效位。如果存在alpha,则boolean isAlphaPremultiplied指定如何解释像素值中的颜色和alpha样本。如果booleantrue,则假定颜色样本已乘以alpha样本。如果没有alpha,则透明度值为Transparency.OPAQUE,否则为Transparency.TRANSLUCENT。传输类型是用于表示像素值的原始数组的类型,必须是DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT之一。
      参数:
      space - 指定的ColorSpace
      bits - 像素值中的位数;例如,掩码中位数的总和。
      rmask - 指定一个掩码,指示整数像素中包含红色分量的位
      gmask - 指定一个掩码,指示整数像素中包含绿色分量的位
      bmask - 指定一个掩码,指示整数像素中包含蓝色分量的位
      amask - 指定一个掩码,指示整数像素中包含alpha分量的位
      isAlphaPremultiplied - 如果颜色样本已经乘以alpha样本,则为true;否则为false
      transferType - 用于表示像素值的数组类型
      抛出:
      IllegalArgumentException - 如果space不是TYPE_RGB空间,或者最小/最大规范化分量值不是0.0/1.0。
  • Method Details

    • getRedMask

      public final int getRedMask()
      返回一个掩码,指示int像素表示中包含红色分量的位。
      返回:
      该掩码指示int像素表示中包含红色样本的位。
    • getGreenMask

      public final int getGreenMask()
      返回一个掩码,指示int像素表示中包含绿色分量的位。
      返回:
      该掩码指示int像素表示中包含绿色样本的位。
    • getBlueMask

      public final int getBlueMask()
      返回一个掩码,指示int像素表示中包含蓝色分量的位。
      返回:
      该掩码指示int像素表示中包含蓝色样本的位。
    • getAlphaMask

      public final int getAlphaMask()
      返回一个掩码,指示int像素表示中包含alpha分量的位。
      返回:
      该掩码指示int像素表示中包含alpha样本的位。
    • getRed

      public final int getRed(int pixel)
      返回指定像素的红色分量,从0到255在默认的RGB ColorSpace中,即sRGB。如果需要,将进行颜色转换。像素值被指定为一个int。返回的值是非预乘值。因此,如果alpha已经预乘,此方法在返回值之前将其除以。例如,如果alpha值为0,则红色值为0。
      指定者:
      getRed 在类中 ColorModel
      参数:
      pixel - 指定的像素
      返回:
      指定像素的红色分量,从0到255在sRGB ColorSpace中。
    • getGreen

      public final int getGreen(int pixel)
      返回指定像素的绿色分量,从0到255在默认的RGB ColorSpace中,即sRGB。如果需要,将进行颜色转换。像素值被指定为一个int。返回的值是非预乘值。因此,如果alpha已经预乘,此方法在返回值之前将其除以。例如,如果alpha值为0,则绿色值为0。
      指定者:
      getGreen 在类中 ColorModel
      参数:
      pixel - 指定的像素
      返回:
      指定像素的绿色分量,从0到255在sRGB ColorSpace中。
    • getBlue

      public final int getBlue(int pixel)
      返回指定像素的蓝色分量,从0到255在默认的RGB ColorSpace中,即sRGB。如果需要,将进行颜色转换。像素值被指定为一个int。返回的值是非预乘值。因此,如果alpha已经预乘,此方法在返回值之前将其除以。例如,如果alpha值为0,则蓝色值为0。
      指定者:
      getBlue 在类中 ColorModel
      参数:
      pixel - 指定的像素
      返回:
      指定像素的蓝色分量,从0到255在sRGB ColorSpace中。
    • getAlpha

      public final int getAlpha(int pixel)
      返回指定像素的alpha分量,从0到255。像素值被指定为一个int
      指定者:
      getAlpha 在类中 ColorModel
      参数:
      pixel - 指定的像素
      返回:
      pixel的alpha分量值,从0到255。
    • getRGB

      public final int getRGB(int pixel)
      返回默认RGB颜色模型格式中像素的颜色/alpha分量。如果需要,将进行颜色转换。像素值被指定为一个int。返回的值是非预乘格式。因此,如果alpha已经预乘,此方法将其除去颜色分量之外。例如,如果alpha值为0,则颜色值都为0。
      覆盖:
      getRGB 在类中 ColorModel
      参数:
      pixel - 指定的像素
      返回:
      指定像素的颜色/alpha分量的RGB值。
      参见:
    • getRed

      public int getRed(Object inData)
      返回指定像素的红色分量,从0到255在默认的RGB ColorSpace中,即sRGB。如果需要,将进行颜色转换。像素值通过作为对象引用传递的transferType类型的数据元素数组指定。返回的值是非预乘值。因此,如果alpha已经预乘,此方法在返回值之前将其除以。例如,如果alpha值为0,则红色值为0。如果inData不是transferType类型的原始数组,将抛出ClassCastException。如果inData不足以容纳此ColorModel的像素值,则将抛出ArrayIndexOutOfBoundsException。由于DirectColorModel可以被子类化,子类继承了此方法的实现,如果它们不覆盖它,则在使用不受支持的transferType时会抛出异常。如果此transferType不受此ColorModel支持,则会抛出UnsupportedOperationException
      覆盖:
      getRed 在类中 ColorModel
      参数:
      inData - 包含像素值的数组
      返回:
      指定像素的红色分量的值。
      抛出:
      ArrayIndexOutOfBoundsException - 如果inData不足以容纳此颜色模型的像素值
      ClassCastException - 如果inData不是transferType类型的原始数组
      UnsupportedOperationException - 如果此transferType不受此颜色模型支持
    • getGreen

      public int getGreen(Object inData)
      返回指定像素的绿色分量,从0到255在默认的RGB ColorSpace中,即sRGB。如果需要,将进行颜色转换。像素值通过作为对象引用传递的transferType类型的数据元素数组指定。返回的值是非预乘值。因此,如果alpha已经预乘,此方法在返回值之前将其除以。例如,如果alpha值为0,则绿色值为0。如果inData不是transferType类型的原始数组,将抛出ClassCastException。如果inData不足以容纳此ColorModel的像素值,则将抛出ArrayIndexOutOfBoundsException。由于DirectColorModel可以被子类化,子类继承了此方法的实现,如果它们不覆盖它,则在使用不受支持的transferType时会抛出异常。如果此transferType不受此ColorModel支持,则会抛出UnsupportedOperationException
      覆盖:
      getGreen 在类 ColorModel
      参数:
      inData - 包含像素值的数组
      返回:
      指定像素的绿色分量的值。
      抛出:
      ArrayIndexOutOfBoundsException - 如果inData的大小不足以容纳此颜色模型的像素值
      ClassCastException - 如果inData不是类型为transferType的原始数组
      UnsupportedOperationException - 如果此transferType不受此颜色模型支持
    • getBlue

      public int getBlue(Object inData)
      返回指定像素的蓝色颜色分量,范围从0到255,默认RGB ColorSpace中的sRGB。如果需要,会进行颜色转换。像素值由作为对象引用传递的transferType类型的数据元素数组指定。返回的值是非预乘值。因此,如果alpha是预乘的,则此方法在返回值之前将其除去。例如,如果alpha值为0,则蓝色值为0。如果inData不是类型为transferType的原始数组,则会抛出ClassCastException。如果inData的大小不足以容纳此ColorModel的像素值,则会抛出ArrayIndexOutOfBoundsException。由于DirectColorModel可以被子类化,子类会继承此方法的实现,如果它们不覆盖它,则会在使用不受支持的transferType时抛出异常。如果不支持此transferType,则会抛出UnsupportedOperationException
      覆盖:
      getBlue 在类 ColorModel
      参数:
      inData - 包含像素值的数组
      返回:
      指定像素的蓝色分量的值。
      抛出:
      ArrayIndexOutOfBoundsException - 如果inData的大小不足以容纳此颜色模型的像素值
      ClassCastException - 如果inData不是类型为transferType的原始数组
      UnsupportedOperationException - 如果此transferType不受此颜色模型支持
    • getAlpha

      public int getAlpha(Object inData)
      返回指定像素的alpha分量,范围从0到255。像素值由作为对象引用传递的transferType类型的数据元素数组指定。如果inData不是类型为transferType的原始数组,则会抛出ClassCastException。如果inData的大小不足以容纳此ColorModel的像素值,则会抛出ArrayIndexOutOfBoundsException。由于DirectColorModel可以被子类化,子类会继承此方法的实现,如果它们不覆盖它,则会在使用不受支持的transferType时抛出异常。如果不支持此transferType,则会抛出UnsupportedOperationException
      覆盖:
      getAlpha 在类 ColorModel
      参数:
      inData - 指定的像素
      返回:
      指定像素的alpha分量,范围从0到255。
      抛出:
      ClassCastException - 如果inData不是类型为transferType的原始数组
      ArrayIndexOutOfBoundsException - 如果inData的大小不足以容纳此ColorModel的像素值
      UnsupportedOperationException - 如果此tranferType不受此ColorModel支持
    • getRGB

      public int getRGB(Object inData)
      返回默认RGB颜色模型格式中指定像素的颜色/alpha分量。如果需要,会进行颜色转换。像素值由作为对象引用传递的transferType类型的数据元素数组指定。如果inData不是类型为transferType的原始数组,则会抛出ClassCastException。如果inData的大小不足以容纳此ColorModel的像素值,则会抛出ArrayIndexOutOfBoundsException。返回的值以非预乘格式呈现。因此,如果alpha是预乘的,则此方法将其除去颜色分量。例如,如果alpha值为0,则颜色值为0。由于DirectColorModel可以被子类化,子类会继承此方法的实现,如果它们不覆盖它,则会在使用不受支持的transferType时抛出异常。
      覆盖:
      getRGB 在类 ColorModel
      参数:
      inData - 指定的像素
      返回:
      指定像素的颜色和alpha分量。
      抛出:
      UnsupportedOperationException - 如果此transferType不受此ColorModel支持
      参见:
    • getDataElements

      public Object getDataElements(int rgb, Object pixel)
      返回此ColorModel中像素的数据元素数组表示,给定默认RGB颜色模型中的整数像素表示。然后,可以将此数组传递给WritableRaster对象的setDataElements方法。如果像素变量为null,则会分配一个新数组。如果pixel不为null,则它必须是类型为transferType的原始数组;否则,会抛出ClassCastException。如果pixel不为null且不足以容纳此ColorModel的像素值,则会抛出ArrayIndexOutOfBoundsException。将返回像素数组。由于DirectColorModel可以被子类化,子类会继承此方法的实现,如果它们不覆盖它,则会在使用不受支持的transferType时抛出异常。
      覆盖:
      getDataElements 在类 ColorModel
      参数:
      rgb - 默认RGB颜色模型中的整数像素表示
      pixel - 指定的像素
      返回:
      ColorModel中指定像素的数组表示
      抛出:
      ClassCastException - 如果pixel不是类型为transferType的原始数组
      ArrayIndexOutOfBoundsException - 如果pixel不为null且不足以容纳此ColorModel的像素值
      UnsupportedOperationException - 如果此transferType不受此ColorModel支持
      参见:
    • getComponents

      public final int[] getComponents(int pixel, int[] components, int offset)
      返回给定像素在此ColorModel中的未归一化颜色/alpha分量数组。像素值以int形式指定。如果components数组为null,则会分配一个新数组。将返回components数组。颜色/alpha分量存储在components数组中,从offset开始,即使该数组是由此方法分配的。如果components数组不为null且不足以容纳从offset开始的所有颜色和alpha分量,则会抛出ArrayIndexOutOfBoundsException
      覆盖:
      getComponents 在类 ColorModel
      参数:
      pixel - 指定的像素
      components - 用于接收指定像素的颜色和alpha分量的数组
      offset - 开始存储颜色和alpha分量的components数组中的偏移量
      返回:
      包含从指定偏移量开始的指定像素的颜色和alpha分量的数组。
    • getComponents

      public final int[] getComponents(Object pixel, int[] components, int offset)
      返回一个包含未标准化颜色/alpha组件的数组,给定此ColorModel中的像素。像素值由作为对象引用传递的transferType类型的数据元素数组指定。如果pixel不是transferType类型的原始数组,则会抛出ClassCastException。如果pixel不足以容纳此ColorModel的像素值,则会抛出ArrayIndexOutOfBoundsException。如果components数组为null,则会分配一个新数组。返回components数组。颜色/alpha组件存储在从offset开始的components数组中,即使该数组是由此方法分配的。如果components数组不为null且不足以容纳从offset开始的所有颜色和alpha组件,则会抛出ArrayIndexOutOfBoundsException。由于DirectColorModel可以被子类化,子类继承此方法的实现,如果不重写,则如果使用不受支持的transferType,则会抛出异常。
      覆盖:
      getComponents 在类中 ColorModel
      参数:
      pixel - 指定的像素
      components - 用于接收指定像素的颜色和alpha组件的数组
      offset - 开始存储颜色和alpha组件的components数组中的偏移量
      返回:
      包含从指定偏移量开始的指定像素的颜色和alpha组件的数组。
      抛出:
      ClassCastException - 如果pixel不是transferType类型的原始数组
      ArrayIndexOutOfBoundsException - 如果pixel不足以容纳此ColorModel的像素值,或者如果components不为null且不足以容纳从offset开始的所有颜色和alpha组件
      UnsupportedOperationException - 如果此transferType不受此颜色模型支持
    • createCompatibleWritableRaster

      public final WritableRaster createCompatibleWritableRaster(int w, int h)
      创建一个具有指定宽度和高度的WritableRaster,其数据布局(SampleModel)与此ColorModel兼容。
      覆盖:
      createCompatibleWritableRaster 在类中 ColorModel
      参数:
      w - 要应用于新WritableRaster的宽度
      h - 要应用于新WritableRaster的高度
      返回:
      一个具有指定宽度和高度的WritableRaster对象。
      抛出:
      IllegalArgumentException - 如果wh小于或等于零
      参见:
    • getDataElement

      public int getDataElement(int[] components, int offset)
      返回一个以int表示的像素值,给定一个未标准化颜色/alpha组件数组。如果components数组不足以容纳从offset开始的所有颜色和alpha组件,则会抛出ArrayIndexOutOfBoundsException
      覆盖:
      getDataElement 在类中 ColorModel
      参数:
      components - 一个未标准化颜色和alpha组件数组
      offset - 开始检索颜色和alpha组件的components中的索引
      返回:
      在此ColorModel中对应于指定组件的int像素值。
      抛出:
      ArrayIndexOutOfBoundsException - 如果components数组不足以容纳从offset开始的所有颜色和alpha组件
    • getDataElements

      public Object getDataElements(int[] components, int offset, Object obj)
      返回此ColorModel中像素的数据元素数组表示,给定一个未标准化颜色/alpha组件数组。然后可以将此数组传递给WritableRaster对象的setDataElements方法。如果components数组不足以容纳从偏移量开始的所有颜色和alpha组件,则会抛出ArrayIndexOutOfBoundsException。如果obj变量为null,则会分配一个新数组。如果obj不为null,则它必须是transferType类型的原始数组;否则,将抛出ClassCastException。如果obj不足以容纳此ColorModel的像素值,则会抛出ArrayIndexOutOfBoundsException。由于DirectColorModel可以被子类化,子类继承此方法的实现,如果不重写,则如果使用不受支持的transferType,则会抛出异常。
      覆盖:
      getDataElements 在类中 ColorModel
      参数:
      components - 一个未标准化颜色和alpha组件数组
      offset - 开始检索颜色和alpha组件的components中的索引
      obj - 表示颜色和alpha组件数组的Object
      返回:
      代表颜色和alpha组件数组的Object
      抛出:
      ClassCastException - 如果obj不是transferType类型的原始数组
      ArrayIndexOutOfBoundsException - 如果obj不足以容纳此ColorModel的像素值或者components数组不足以容纳从offset开始的所有颜色和alpha组件
      UnsupportedOperationException - 如果此transferType不受此颜色模型支持
      参见:
    • coerceData

      public final ColorModel coerceData(WritableRaster raster, boolean isAlphaPremultiplied)
      强制光栅数据与isAlphaPremultiplied变量指定的状态匹配,假设数据当前由此ColorModel正确描述。它可能会将颜色光栅数据乘以或除以alpha,或者如果数据处于正确状态,则不执行任何操作。如果需要强制数据,此方法还将返回一个适当设置isAlphaPremultiplied标志的此ColorModel实例。如果此transferType不受此ColorModel支持,则此方法将抛出UnsupportedOperationException。由于ColorModel可以被子类化,子类继承此方法的实现,如果不重写,则如果使用不受支持的transferType,则会抛出异常。
      覆盖:
      coerceData 在类中 ColorModel
      参数:
      raster - WritableRaster数据
      isAlphaPremultiplied - 如果alpha是预乘的,则为true;否则为false
      返回:
      代表强制数据的ColorModel对象。
      抛出:
      UnsupportedOperationException - 如果此transferType不受此颜色模型支持
    • isCompatibleRaster

      public boolean isCompatibleRaster(Raster raster)
      如果raster与此ColorModel兼容,则返回true;否则返回false
      覆盖:
      isCompatibleRaster 在类中 ColorModel
      参数:
      raster - 要测试兼容性的Raster对象
      返回:
      如果raster与此ColorModel兼容,则返回true;否则返回false
    • toString

      public String toString()
      返回表示此DirectColorModelString
      覆盖:
      toString 在类中 ColorModel
      返回:
      代表此DirectColorModelString