Module  java.desktop
软件包  java.awt.image

Class DirectColorModel

  • All Implemented Interfaces:
    Transparency


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

    从显示或处理目的,从像素值到颜色/α分量的转换是样本与组件的一一对应关系。 A DirectColorModel通常用于使用掩模来定义打包样本的图像数据。 例如, DirectColorModel可以与SinglePixelPackedSampleModel一起使用来构建一个BufferedImage 通常, SampleModelColorModel使用的掩码将是一样的。 然而,如果它们不同,像素数据的颜色解释将根据ColorModel的掩码进行。

    单个int像素表示对于此类的所有对象是有效的,因为总是可以在单个int中表示与该类一起使用的像素值。 因此,由于无效的像素值,使用此表示的方法不会抛出IllegalArgumentException

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

      Number of bits:        32
     Red mask:              0x00ff0000
     Green mask:            0x0000ff00
     Blue mask:             0x000000ff
     Alpha mask:            0xff000000
     Color space:           sRGB
     isAlphaPremultiplied:  False
     Transparency:          Transparency.TRANSLUCENT
     transferType:          DataBuffer.TYPE_INT 

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

    另请参见:
    ColorModelColorSpaceSinglePixelPackedSampleModelBufferedImageColorModel.getRGBdefault()
    • 构造方法详细信息

      • DirectColorModel

        public DirectColorModel​(int bits,
                                int rmask,
                                int gmask,
                                int bmask)
        从指定的掩码中构造一个DirectColorModel ,指示int像素表示中的哪些位包含红色,绿色和蓝色样本。 由于像素值不包含alpha信息,因此所有像素都被视为不透明,这意味着alpha = 1.0。 每个掩码中的所有位必须是连续的,并且适合int像素表示的指定数目的最低有效位。 ColorSpace是默认的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像素表示的指定数目的最低有效位。 阿尔法,如果存在,不是预付费。 ColorSpace是默认的sRGB空间。 透明度值是Transparency.OPAQUE,如果不存在alpha,或Transparency.TRANSLUCENT,否则。 传输类型是可容纳单个像素的DataBuffer.TYPE_BYTE,DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT中最小的。
        参数
        bits - 像素值中的位数; 例如,掩码中的比特数之和。
        rmask - 指定指示整数像素中的哪些位包含红色分量的掩码
        gmask - 指定指示整数像素中的哪些位包含绿色分量的掩码
        bmask - 指定指示整数像素中的哪些位包含蓝色分量的掩码
        amask - 指定指示整数像素中的哪些位包含α分量的掩码
      • 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 ,则假设颜色样本已被乘以α样本。 透明度值为Transparency.OPAQUE,如果不存在alpha,或Transparency.TRANSLUCENT则为透明度。 传输类型是用于表示像素值的原始数组的类型,必须是DataBuffer.TYPE_BYTE,DataBuffer.TYPE_USHORT或DataBuffer.TYPE_INT之一。
        参数
        space - 指定的 ColorSpace
        bits - 像素值中的位数; 例如,掩码中的比特数之和。
        rmask - 指定一个掩码,指示整数像素中的哪些位包含红色分量
        gmask - 指定一个掩码,指示整数像素中的哪些位包含绿色分量
        bmask - 指定指示整数像素中的哪些位包含蓝色分量的掩码
        amask - 指定指示整数像素中的哪些位包含α分量的掩码
        isAlphaPremultiplied - true如果颜色样本被alpha样本预乘, 否则为false
        transferType - 用于表示像素值的数组类型
        异常
        IllegalArgumentException - 如果 space不是TYPE_RGB空间,或者最小/最大标准化组件值不是0.0 / 1.0。
    • 方法详细信息

      • 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像素表示的哪个位包含α样本。
      • getRed

        public final int getRed​(int pixel)
        返回指定像素的红色分量,在默认RGB ColorSpace (sRGB)中从0到255。 必要时进行颜色转换。 像素值被指定为int 返回的值是非预先乘以的值。 因此,如果alpha被预乘,则该方法在返回值之前将其分开。 如果alpha值为0,例如,红色值为0。
        Specified by:
        getRedColorModel
        参数
        pixel - 指定的像素
        结果
        指定像素的红色分量,sRGB ColorSpace中的0到255。
      • getGreen

        public final int getGreen​(int pixel)
        返回指定像素的绿色分量,在默认RGB ColorSpace sRGB中从0到255。 必要时进行颜色转换。 像素值被指定为int 返回的值是非预先乘以的值。 因此,如果alpha被预乘,则该方法在返回值之前将其分开。 如果alpha值为0,例如,绿色值为0。
        Specified by:
        getGreenColorModel
        参数
        pixel - 指定的像素
        结果
        指定像素的绿色分量,sRGB ColorSpace中的0到255。
      • getBlue

        public final int getBlue​(int pixel)
        返回指定像素的蓝色分量,在默认RGB ColorSpace (sRGB)中从0到255。 必要时进行颜色转换。 像素值被指定为int 返回的值是非预先乘以的值。 因此,如果alpha被预乘,则该方法在返回值之前将其分开。 如果alpha值为0,例如,蓝色值为0。
        Specified by:
        getBlueColorModel
        参数
        pixel - 指定的像素
        结果
        指定像素的蓝色分量,sRGB ColorSpace中的0到255。
      • getAlpha

        public final int getAlpha​(int pixel)
        返回指定像素的alpha分量,从0到255。像素值指定为 int
        Specified by:
        getAlphaColorModel
        参数
        pixel - 指定的像素
        结果
        alpha分量的 pixel从0到255。
      • getRGB

        public final int getRGB​(int pixel)
        以默认RGB颜色模型格式返回像素的颜色/ alpha分量。 必要时进行颜色转换。 像素值被指定为int 返回的值为非预先乘法格式。 因此,如果alpha被预乘,则该方法将其从颜色分量中分离出来。 如果alpha值为0,例如,颜色值分别为0。
        重写:
        getRGBColorModel
        参数
        pixel - 指定的像素
        结果
        指定像素的颜色/ alpha分量的RGB值。
        另请参见:
        ColorModel.getRGBdefault()
      • getRed

        public int getRed​(Object inData)
        返回指定像素的红色分量,在默认RGB ColorSpace (sRGB)中从0到255。 必要时进行颜色转换。 像素值由作为对象引用传入的数据元素transferType的数组指定。 返回的值是非预先乘以的值。 因此,如果alpha被预乘,则该方法在返回值之前将其分开。 如果α值是0,例如,红色值是0。如果inData不是类型的基本数组transferType ,一个ClassCastException被抛出。 一个ArrayIndexOutOfBoundsException如果抛出inData不够大,不能保存这个像素值ColorModel 由于DirectColorModel可以被子类化,子类继承了该方法的实现,如果它们不覆盖它们,那么如果它们使用不支持的transferType它们将抛出异常。 一个UnsupportedOperationException如果这是抛出transferType不受此支持ColorModel
        重写:
        getRedColorModel
        参数
        inData - 包含像素值的数组
        结果
        指定像素的红色分量的值。
        异常
        ArrayIndexOutOfBoundsException - 如果 inData不够大,不能持有该颜色模型的像素值
        ClassCastException -如果 inData不是类型的基本数组 transferType
        UnsupportedOperationException - 如果此颜色模型不支持此 transferType
      • getGreen

        public int getGreen​(Object inData)
        返回指定像素的绿色分量,在默认RGB ColorSpace (sRGB)中从0到255。 必要时进行颜色转换。 像素值由作为对象引用传入的数据元素transferType的数组指定。 返回的值是非预先乘以的值。 因此,如果alpha被预乘,则该方法在返回值之前将其分开。 如果α值是0,例如,绿色的值为0。如果inData不是类型的基本数组transferType ,一个ClassCastException被抛出。 一个ArrayIndexOutOfBoundsException如果抛出inData不够大,不能保存这个像素值ColorModel 由于DirectColorModel可以被子类化,子类继承了此方法的实现,如果它们不覆盖它,那么如果它们使用不支持的transferType ,则它们会引发异常。 一个UnsupportedOperationException如果这是抛出transferType不受此支持ColorModel
        重写:
        getGreenColorModel
        参数
        inData - 包含像素值的数组
        结果
        指定像素的绿色分量的值。
        异常
        ArrayIndexOutOfBoundsException - 如果 inData不够大,不能持有该颜色模型的像素值
        ClassCastException -如果 inData不是类型的基本数组 transferType
        UnsupportedOperationException - 如果此颜色模型不支持此 transferType
      • getBlue

        public int getBlue​(Object inData)
        返回指定像素的蓝色分量,在默认RGB ColorSpace (sRGB)中从0到255。 必要时进行颜色转换。 像素值由作为对象引用传入的数据元素transferType数组指定。 返回的值是非预先乘以的值。 因此,如果alpha被预乘,则该方法在返回值之前将其分开。 如果α值是0,例如,蓝色值为0。如果inData不是类型的基本数组transferType ,一个ClassCastException被抛出。 一个ArrayIndexOutOfBoundsException如果抛出inData不够大,不能保存这个像素值ColorModel 由于DirectColorModel可以被子类化,子类继承了此方法的实现,如果它们不覆盖它,那么如果它们使用不支持的transferType它们将抛出异常。 如果这个transferType不支持UnsupportedOperationException则会抛出一个ColorModel
        重写:
        getBlueColorModel
        参数
        inData - 包含像素值的数组
        结果
        指定像素的蓝色分量的值。
        异常
        ArrayIndexOutOfBoundsException - 如果 inData不够大,不能持有该颜色模型的像素值
        ClassCastException -如果 inData不是类型的基本数组 transferType
        UnsupportedOperationException - 如果此颜色模型不支持此 transferType
      • getAlpha

        public int getAlpha​(Object inData)
        返回指定像素的alpha分量,从0到255进行比例。像素值由作为对象引用传入的数据元素数组transferType指定。 如果inData不是类型的基本数组transferType ,一个ClassCastException被抛出。 一个ArrayIndexOutOfBoundsException如果抛出inData不够大,不能保存这个像素值ColorModel 由于DirectColorModel可以被子类化,子类继承了此方法的实现,如果它们不覆盖它,那么如果它们使用不支持的transferType它们将抛出异常。 如果不支持此transferType ,则抛出UnsupportedOperationException
        重写:
        getAlphaColorModel
        参数
        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被抛出。 一个ArrayIndexOutOfBoundsException如果抛出inData不够大,不能保存这个像素值ColorModel 返回的值为非预先乘法格式。 因此,如果alpha被预乘,则该方法将其从颜色分量中分离出来。 例如,如果alpha值为0,则颜色值为0.由于DirectColorModel可以被子类化,子类继承了此方法的实现,如果它们不覆盖它,则如果使用不支持的transferType ,则它们将抛出异常。
        重写:
        getRGBColorModel
        参数
        inData - 指定的像素
        结果
        指定像素的颜色和alpha分量。
        异常
        UnsupportedOperationException - 如果这个 transferType不支持这个 ColorModel
        另请参见:
        ColorModel.getRGBdefault()
      • getDataElements

        public Object getDataElements​(int rgb,
                                      Object pixel)
        返回此ColorModel中的像素的数据元素数组表示,给出了默认RGB颜色模型中的整数像素表示。 然后可以将该数组传递给WritableRaster对象的setDataElements方法。 如果像素变量为null ,则会分配一个新数组。 如果pixel不是null ,它必须是transferType类型的基本数组; 否则,抛出一个ClassCastException 一个ArrayIndexOutOfBoundsException如果抛出pixel不够大,不能保存这个像素值ColorModel 返回像素数组。 由于DirectColorModel可以被子类化,子类继承了此方法的实现,如果它们不覆盖它,那么如果它们使用不支持的transferType它们将抛出异常。
        重写:
        getDataElementsColorModel
        参数
        rgb - 默认RGB颜色模型中的整数像素表示
        pixel - 指定的像素
        结果
        ColorModel指定像素的数组表示
        异常
        ClassCastException -如果 pixel不是类型的基本数组 transferType
        ArrayIndexOutOfBoundsException - 如果 pixel不够大,不能保持这个 ColorModel的像素值
        UnsupportedOperationException - 如果这个 transferType不支持此 ColorModel
        另请参见:
        WritableRaster.setDataElements(int, int, java.lang.Object)SampleModel.setDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer)
      • getComponents

        public final int[] getComponents​(int pixel,
                                         int[] components,
                                         int offset)
        返回给这个ColorModel一个像素的非规范化颜色/ alpha分量的数组。 像素值被指定为int 如果components阵列为null ,则会分配一个新阵列。 将返回components数组。 即使通过此方法分配阵列,颜色/ Alpha组件存储在从components开始的offset阵列中。 一个ArrayIndexOutOfBoundsException如果抛出components数组不null ,而不是大到足以容纳所有的颜色和alpha分量,开始offset
        重写:
        getComponentsColorModel
        参数
        pixel - 指定的像素
        components - 用于接收指定像素的颜色和alpha分量的数组
        offset - 开始存储颜色和alpha组件的 components阵列的偏移量
        结果
        一个数组,包含从指定的偏移开始的指定像素的颜色和alpha分量。
      • getComponents

        public final int[] getComponents​(Object pixel,
                                         int[] components,
                                         int offset)
        在这个ColorModel给出一个像素,返回一个非规范化颜色/ alpha分量的数组。 像素值由作为对象引用传入的数据元素transferType的数组指定。 如果pixel不是类型的基本数组transferType ,一个ClassCastException被抛出。 一个ArrayIndexOutOfBoundsException如果抛出pixel不够大,不能保存这个像素值ColorModel 如果components阵列为null ,则会分配一个新阵列。 将返回components数组。 颜色/ alpha分量存储中components数组以offset ,即使阵列通过这种方法分配的。 一个ArrayIndexOutOfBoundsException如果抛出components数组不null ,而不是大到足以容纳所有的颜色和alpha分量,开始offset 由于DirectColorModel可以被子类化,子类继承了该方法的实现,如果它们不覆盖它,那么如果它们使用不支持的transferType它们将抛出异常。
        重写:
        getComponentsColorModel
        参数
        pixel - 指定的像素
        components - 接收指定像素的颜色和alpha分量的数组
        offset - 要开始存储颜色和alpha组件的 components阵列的偏移量
        结果
        一个数组,包含从指定的偏移开始的指定像素的颜色和alpha分量。
        异常
        ClassCastException - 如果 pixel不是 transferType类型的原始数组
        ArrayIndexOutOfBoundsException - 如果 pixel不够大以容纳 ColorModel的像素值,或者如果 components不是 null ,并且不够大,不能容纳所有颜色和alpha分量,从 offset开始
        UnsupportedOperationException - 如果此颜色模型不支持此 transferType
      • createCompatibleWritableRaster

        public final WritableRaster createCompatibleWritableRaster​(int w,
                                                                   int h)
        创建 WritableRaster具有指定的宽度和高度,其具有的数据布局( SampleModel )与此兼容 ColorModel
        重写:
        createCompatibleWritableRasterColorModel
        参数
        w - 要应用于新的 WritableRaster的宽度
        h - 适用于新的 WritableRaster的高度
        结果
        一个 WritableRaster对象具有指定的宽度和高度。
        异常
        IllegalArgumentException - 如果 wh小于或等于零
        另请参见:
        WritableRasterSampleModel
      • getDataElement

        public int getDataElement​(int[] components,
                                  int offset)
        返回表示为一个像素值int在此ColorModel ,给定非标准化颜色/ alpha分量的阵列。 一个ArrayIndexOutOfBoundsException如果抛出components阵列是不是大到足以容纳所有的颜色和alpha分量,开始offset
        重写:
        getDataElementColorModel
        参数
        components - 非规范化颜色和alpha组件的数组
        offset - 索引到 components ,开始检索颜色和alpha组件
        结果
        一个 int像素值在这 ColorModel对应的指定组件。
        异常
        ArrayIndexOutOfBoundsException - 如果 components数组不够大,不能容纳从 offset开始的所有颜色和alpha组件
      • getDataElements

        public Object getDataElements​(int[] components,
                                      int offset,
                                      Object obj)
        给出这个ColorModel的一个像素的数据元素数组表示,给出了一个非标准化颜色/ alpha分量的数组。 然后可以将该数组传递给WritableRaster对象的setDataElements方法。 一个ArrayIndexOutOfBoundsException ,如果被抛出components阵列是没有大到足以容纳所有的颜色和alpha分量,起始偏移量。 如果obj变量为null ,则会分配一个新数组。 如果obj不是null ,它必须是transferType类型的原始数组; 否则,抛出一个ClassCastException 一个ArrayIndexOutOfBoundsException如果抛出obj不够大,不能保存这个像素值ColorModel 由于DirectColorModel可以被子类化,子类继承了此方法的实现,如果它们不覆盖它,那么如果它们使用不支持的transferType它们将抛出异常。
        重写:
        getDataElementsColorModel
        参数
        components - 非规范化颜色和alpha组件的数组
        offset - 索引到 components ,开始检索颜色和alpha组件
        obj - Object表示颜色和alpha组件的数组
        结果
        一个 Object表示一个颜色和alpha组件的数组。
        异常
        ClassCastException - 如果 obj不是类型为 transferType的原始数组
        ArrayIndexOutOfBoundsException - 如果 obj不够大以容纳 ColorModel的像素值,或 components阵列不够大,不足以容纳所有颜色和alpha分量从 offset开始
        UnsupportedOperationException - 如果此颜色模型不支持此 transferType
        另请参见:
        WritableRaster.setDataElements(int, int, java.lang.Object)SampleModel.setDataElements(int, int, java.lang.Object, java.awt.image.DataBuffer)
      • coerceData

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

        public boolean isCompatibleRaster​(Raster raster)
        返回 true如果 raster是兼容这个 ColorModelfalse如果不是。
        重写:
        isCompatibleRasterColorModel
        参数
        raster - 要测试兼容性的Raster对象
        结果
        true如果raster是兼容这个ColorModel ; false否则。
      • toString

        public String toString​()
        返回 String表示此 DirectColorModel
        重写:
        toStringColorModel
        结果
        一个 String代表这个 DirectColorModel