模块  java.desktop
软件包  java.awt.image

Class WritableRaster


  • public class WritableRaster
    extends Raster
    此类扩展Raster以提供像素写入功能。 有关Raster如何存储像素的说明,请参阅Raster的类注释。

    这个类的构造函数受到保护。 要实例化WritableRaster,请使用Raster类中的createWritableRaster工厂方法之一。

    • 构造方法详细信息

      • WritableRaster

        protected WritableRaster​(SampleModel sampleModel,
                                 Point origin)
        使用给定的SampleModel构造WritableRaster。 WritableRaster的左上角是原点,它与SampleModel的大小相同。 将自动创建足以描述WritableRaster的DataBuffer。
        参数
        sampleModel - 指定布局的SampleModel。
        origin - 指定原点的Point。
        异常
        RasterFormatException - 如果计算 origin.x + sampleModel.getWidth()origin.y + sampleModel.getHeight()导致整数溢出
      • WritableRaster

        protected WritableRaster​(SampleModel sampleModel,
                                 DataBuffer dataBuffer,
                                 Point origin)
        使用给定的SampleModel和DataBuffer构造WritableRaster。 WritableRaster的左上角是原点,它与SampleModel的大小相同。 DataBuffer未初始化,必须与SampleModel兼容。
        参数
        sampleModel - 指定布局的SampleModel。
        dataBuffer - 包含图像数据的DataBuffer。
        origin - 指定原点的Point。
        异常
        RasterFormatException - 如果计算 origin.x + sampleModel.getWidth()origin.y + sampleModel.getHeight()导致整数溢出
      • WritableRaster

        protected WritableRaster​(SampleModel sampleModel,
                                 DataBuffer dataBuffer,
                                 Rectangle aRegion,
                                 Point sampleModelTranslate,
                                 WritableRaster parent)
        使用给定的SampleModel,DataBuffer和parent构造WritableRaster。 aRegion指定新Raster的边界矩形。 当转换为基本Raster的坐标系时,基本Raster必须包含aRegion。 (基本Raster是Raster的祖先,没有父级。)sampleModelTranslate指定新Raster的sampleModelTranslateX和sampleModelTranslateY值。 请注意,此构造函数通常应由其他构造函数或create方法调用,不应直接使用。
        参数
        sampleModel - 指定布局的SampleModel。
        dataBuffer - 包含图像数据的DataBuffer。
        aRegion - 指定图像区域的矩形。
        sampleModelTranslate - 指定从SampleModel到Raster坐标的转换的Point。
        parent - 此栅格的父级(如果有)。
        异常
        RasterFormatException - 如果 aRegion宽度或高度小于或等于零,或计算 aRegion.x + aRegion.widthaRegion.y + aRegion.height导致整数溢出
    • 方法详细信息

      • getWritableParent

        public WritableRaster getWritableParent()
        返回此WritableRaster的父WritableRaster(如果有),否则返回null。
        结果
        WritableRaster的父 WritableRaster ,或 null
      • createWritableTranslatedChild

        public WritableRaster createWritableTranslatedChild​(int childMinX,
                                                            int childMinY)
        创建一个与此相同大小的WritableRaster,SampleModel和DataBuffer,但具有不同的位置。 新的WritableRaster将拥有对当前WritableRaster的引用,可通过其getParent()和getWritableParent()方法访问。
        参数
        childMinX - 新Raster左上角的X坐标。
        childMinY - 新Raster左上角的Y坐标。
        结果
        除指定位置外,与此相同的 WritableRaster
        异常
        RasterFormatException - 如果计算 childMinX + this.getWidth()childMinY + this.getHeight()导致整数溢出
      • createWritableChild

        public WritableRaster createWritableChild​(int parentX,
                                                  int parentY,
                                                  int w,
                                                  int h,
                                                  int childMinX,
                                                  int childMinY,
                                                  int[] bandList)
        返回一个新的WritableRaster,它共享全部或部分WritableRaster的DataBuffer。 新的WritableRaster将拥有对当前WritableRaster的引用,可通过其getParent()和getWritableParent()方法访问。

        parentX,parentY,width和height参数在此WritableRaster的坐标空间中形成一个Rectangle,指示要共享的像素区域。 如果此Rectangle未包含在当前WritableRaster的边界中,则会引发错误。

        新的WritableRaster可以另外转换为平面的不同坐标系,而不是当前WritableRaster使用的坐标系。 childMinX和childMinY参数给出返回的WritableRaster的左上角像素的新(x,y)坐标; 新WritableRaster中的坐标(childMinX,childMinY)将映射到与当前WritableRaster中的坐标(parentX,parentY)相同的像素。

        新的WritableRaster可以被定义为仅包含当前WritableRaster的一个子带,可能通过bandList参数重新排序。 如果bandList为null,则将其包含在当前顺序中的当前WritableRaster的所有band。

        要创建一个包含当前WritableRaster的子区域,但是共享其坐标系统和带一个新的WritableRaster,这种方法应该childMinX(等于parentX),childMinY等于parentY)和bandList(被称为等于空。

        参数
        parentX - 此WritableRaster坐标中左上角的X坐标。
        parentY - 此WritableRaster坐标中左上角的Y坐标。
        w - 以(parentX,parentY)开头的区域宽度。
        h - 以(parentX,parentY)开头的区域的高度。
        childMinX - 返回的WritableRaster左上角的X坐标。
        childMinY - 返回的WritableRaster左上角的Y坐标。
        bandList - 波段索引数组,或null以使用所有波段。
        结果
        一个 WritableRaster分享的全部或部分 DataBuffer如此 WritableRaster
        异常
        RasterFormatException - 如果子区域位于栅格边界之外。
        RasterFormatException -如果 wh小于或等于0,或者计算任何的 parentX + wparentY + hchildMinX + w ,或 childMinY + h导致整数溢出
      • setDataElements

        public void setDataElements​(int x,
                                    int y,
                                    Object inData)
        为TransferType类型的基本数组设置单个像素的数据。 对于Java 2D(tm)API支持的图像数据,这将是DataBuffer.TYPE_BYTE,DataBuffer.TYPE_USHORT,DataBuffer.TYPE_INT,DataBuffer.TYPE_SHORT,DataBuffer.TYPE_FLOAT或DataBuffer.TYPE_DOUBLE之一。 阵列中的数据可以是打包格式,因此提高了数据传输的效率。 如果坐标不在边界内,或者inData不足以容纳像素数据,则可能抛出ArrayIndexOutOfBoundsException。 但是,不保证显式边界检查。 如果输入对象不为null并且引用除TransferType数组之外的任何内容,则抛出ClassCastException。
        参数
        x - 像素位置的X坐标。
        y - 像素位置的Y坐标。
        inData - 对getTransferType()定义的类型数组的对象引用,以及包含要放置在x,y的像素数据的长度为getNumDataElements()的对象引用。
        异常
        ArrayIndexOutOfBoundsException - 如果坐标不在边界内,或者inData太小而无法容纳输入。
        另请参见:
        SampleModel.setDataElements(int, int, Object, DataBuffer)
      • setDataElements

        public void setDataElements​(int x,
                                    int y,
                                    Raster inRaster)
        设置输入Raster中像素矩形的数据。 输入Raster必须与此WritableRaster兼容,因为它们必须具有相同数量的band,相应的band必须具有相同的每个样本位数,TransferTypes和NumDataElements必须相同,以及getDataElements / setDataElements使用的打包必须是相同的。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。 但是,不保证显式边界检查。
        参数
        x - 像素位置的X坐标。
        y - 像素位置的Y坐标。
        inRaster - 包含放置在x,y的数据的栅格。
        异常
        NullPointerException - 如果inRaster为null。
        ArrayIndexOutOfBoundsException - 如果坐标不在边界内。
      • setDataElements

        public void setDataElements​(int x,
                                    int y,
                                    int w,
                                    int h,
                                    Object inData)
        从TransferType类型的基本数组中设置像素矩形的数据。 对于Java 2D API支持的图像数据,这将是DataBuffer.TYPE_BYTE,DataBuffer.TYPE_USHORT,DataBuffer.TYPE_INT,DataBuffer.TYPE_SHORT,DataBuffer.TYPE_FLOAT或DataBuffer.TYPE_DOUBLE之一。 阵列中的数据可以是打包格式,因此提高了数据传输的效率。 如果坐标不在边界内,或者inData不足以容纳像素数据,则可能抛出ArrayIndexOutOfBoundsException。 但是,不保证显式边界检查。 如果输入对象不为null并且引用除TransferType数组之外的任何内容,则抛出ClassCastException。
        参数
        x - 左上角像素位置的X坐标。
        y - 左上角像素位置的Y坐标。
        w - 像素矩形的宽度。
        h - 像素矩形的高度。
        inData - 由getTransferType()定义的类型数组的对象引用,长度为w * h * getNumDataElements(),包含放置在x,y和x + w-1,y + h-1之间的像素数据。
        异常
        NullPointerException - 如果inData为null。
        ArrayIndexOutOfBoundsException - 如果坐标不在边界内,或者inData太小而无法容纳输入。
        另请参见:
        SampleModel.setDataElements(int, int, int, int, Object, DataBuffer)
      • setRect

        public void setRect​(Raster srcRaster)
        将像素从Raster srcRaster复制到此WritableRaster。 除非地址超出此栅格的范围,否则srcRaster中的每个像素都将复制到此栅格中的相同x,y地址。 srcRaster必须与此WritableRaster具有相同数量的波段。 副本是源样本到相应目标样本的简单副本。

        如果源和目标Rasters的所有样本都是整数类型且大小小于或等于32位,则调用此方法相当于对两个Rasters中有效的所有x,y地址执行以下代码。

           Raster srcRaster; WritableRaster dstRaster; for (int b = 0; b < srcRaster.getNumBands(); b++) { dstRaster.setSample(x, y, b, srcRaster.getSample(x, y, b)); }  
        因此,当将整数类型源复制到整数类型目的地时,如果源样本大小大于特定频带的目标样本大小,则源样本的高位比特被截断。 如果源样本大小小于特定波段的目标大小,则目标的高位比特将进行零扩展或符号扩展,具体取决于srcRaster的SampleModel是否将样本视为有符号或无符号数量。

        将float或double源复制到整数类型目标时,每个源样本都会强制转换为目标类型。 将整数类型的源复制到float或double目标时,首先使用上面的整数类型规则将源转换为32位int(如果需要),然后将int转换为float或double。

        参数
        srcRaster - 用于复制像素的光栅。
        异常
        NullPointerException - 如果srcRaster为null。
      • setRect

        public void setRect​(int dx,
                            int dy,
                            Raster srcRaster)
        将像素从Raster srcRaster复制到此WritableRaster。 对于srcRaster中的每个(x,y)地址,相应的像素将被复制到此WritableRaster中的地址(x + dx,y + dy),除非(x + dx,y + dy)超出此栅格的范围。 srcRaster必须与此WritableRaster具有相同数量的波段。 副本是源样本到相应目标样本的简单副本。 有关详细信息,请参阅setRect(Raster)
        参数
        dx - 从src空间到副本的dst空间的X转换因子。
        dy - 从src空间到副本的dst空间的Y转换因子。
        srcRaster - 用于复制像素的光栅。
        异常
        NullPointerException - 如果srcRaster为null。
      • setPixel

        public void setPixel​(int x,
                             int y,
                             int[] iArray)
        使用int数组样本设置DataBuffer中的像素以进行输入。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。 但是,不保证显式边界检查。
        参数
        x - 像素位置的X坐标。
        y - 像素位置的Y坐标。
        iArray - int数组中的输入样本。
        异常
        NullPointerException - 如果iArray为null。
        ArrayIndexOutOfBoundsException - 如果坐标不在边界内,或者iArray太小而无法保持输入。
      • setPixel

        public void setPixel​(int x,
                             int y,
                             float[] fArray)
        使用样本的float数组为输入设置DataBuffer中的像素。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。 但是,不保证显式边界检查。
        参数
        x - 像素位置的X坐标。
        y - 像素位置的Y坐标。
        fArray - float数组中的输入样本。
        异常
        NullPointerException - 如果fArray为null。
        ArrayIndexOutOfBoundsException - 如果坐标不在边界内,或者fArray太小而无法容纳输入。
      • setPixel

        public void setPixel​(int x,
                             int y,
                             double[] dArray)
        使用双数组样本设置DataBuffer中的像素以进行输入。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。 但是,不保证显式边界检查。
        参数
        x - 像素位置的X坐标。
        y - 像素位置的Y坐标。
        dArray - 双数组中的输入样本。
        异常
        NullPointerException - 如果 NullPointerException为null。
        ArrayIndexOutOfBoundsException - 如果坐标不在边界内,或者 ArrayIndexOutOfBoundsException太小而无法保持输入。
      • setPixels

        public void setPixels​(int x,
                              int y,
                              int w,
                              int h,
                              int[] iArray)
        为每个数组元素包含一个样本的int数组设置像素矩形的所有样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。 但是,不保证显式边界检查。
        参数
        x - 左上角像素位置的X坐标。
        y - 左上角像素位置的Y坐标。
        w - 像素矩形的宽度。
        h - 像素矩形的高度。
        iArray - 输入int像素数组。
        异常
        NullPointerException - 如果iArray为null。
        ArrayIndexOutOfBoundsException - 如果坐标不在边界内,或者iArray太小而无法容纳输入。
      • setPixels

        public void setPixels​(int x,
                              int y,
                              int w,
                              int h,
                              float[] fArray)
        为包含每个数组元素一个样本的float数组设置像素矩形的所有样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。 但是,不保证显式边界检查。
        参数
        x - 左上角像素位置的X坐标。
        y - 左上角像素位置的Y坐标。
        w - 像素矩形的宽度。
        h - 像素矩形的高度。
        fArray - 输入浮点像素数组。
        异常
        NullPointerException - 如果fArray为null。
        ArrayIndexOutOfBoundsException - 如果坐标不在边界内,或者fArray太小而无法容纳输入。
      • setPixels

        public void setPixels​(int x,
                              int y,
                              int w,
                              int h,
                              double[] dArray)
        为每个数组元素包含一个样本的双数组设置像素矩形的所有样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。 但是,不保证显式边界检查。
        参数
        x - 左上角像素位置的X坐标。
        y - 左上角像素位置的Y坐标。
        w - 像素矩形的宽度。
        h - 像素矩形的高度。
        dArray - 输入双像素阵列。
        异常
        NullPointerException - 如果 NullPointerException为null。
        ArrayIndexOutOfBoundsException - 如果坐标不在边界内,或者 ArrayIndexOutOfBoundsException太小而无法容纳输入。
      • setSample

        public void setSample​(int x,
                              int y,
                              int b,
                              int s)
        使用int作为输入,为DataBuffer中位于(x,y)的像素设置指定band中的样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。 但是,不保证显式边界检查。
        参数
        x - 像素位置的X坐标。
        y - 像素位置的Y坐标。
        b - 要设置的乐队。
        s - 输入样本。
        异常
        ArrayIndexOutOfBoundsException - 如果坐标或波段索引不在边界内。
      • setSample

        public void setSample​(int x,
                              int y,
                              int b,
                              float s)
        使用float作为输入,为DataBuffer中位于(x,y)的像素设置指定band中的样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。 但是,不保证显式边界检查。
        参数
        x - 像素位置的X坐标。
        y - 像素位置的Y坐标。
        b - 要设置的乐队。
        s - 输入样本为浮点数。
        异常
        ArrayIndexOutOfBoundsException - 如果坐标或波段索引不在边界内。
      • setSample

        public void setSample​(int x,
                              int y,
                              int b,
                              double s)
        使用double作为输入,为DataBuffer中位于(x,y)的像素设置指定band中的样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。 但是,不保证显式边界检查。
        参数
        x - 像素位置的X坐标。
        y - 像素位置的Y坐标。
        b - 要设置的乐队。
        s - 输入样本为double。
        异常
        ArrayIndexOutOfBoundsException - 如果坐标或波段索引不在边界内。
      • setSamples

        public void setSamples​(int x,
                               int y,
                               int w,
                               int h,
                               int b,
                               int[] iArray)
        从包含每个数组元素一个样本的int数组中为指定的像素矩形设置指定band中的样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。 但是,不保证显式边界检查。
        参数
        x - 左上角像素位置的X坐标。
        y - 左上角像素位置的Y坐标。
        w - 像素矩形的宽度。
        h - 像素矩形的高度。
        b - 要设置的乐队。
        iArray - 输入int样本数组。
        异常
        NullPointerException - 如果iArray为null。
        ArrayIndexOutOfBoundsException - 如果坐标或波段索引不在边界内,或者iArray太小而无法保持输入。
      • setSamples

        public void setSamples​(int x,
                               int y,
                               int w,
                               int h,
                               int b,
                               float[] fArray)
        从包含每个数组元素一个样本的float数组中为指定的像素矩形设置指定band中的样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。 但是,不保证显式边界检查。
        参数
        x - 左上角像素位置的X坐标。
        y - 左上角像素位置的Y坐标。
        w - 像素矩形的宽度。
        h - 像素矩形的高度。
        b - 要设置的乐队。
        fArray - 输入float样本数组。
        异常
        NullPointerException - 如果fArray为null。
        ArrayIndexOutOfBoundsException - 如果坐标或波段索引不在边界内,或者fArray太小而无法保持输入。
      • setSamples

        public void setSamples​(int x,
                               int y,
                               int w,
                               int h,
                               int b,
                               double[] dArray)
        从包含每个数组元素一个样本的double数组中为指定的像素矩形设置指定band中的样本。 如果坐标不在边界内,则可能抛出ArrayIndexOutOfBoundsException。 但是,不保证显式边界检查。
        参数
        x - 左上角像素位置的X坐标。
        y - 左上角像素位置的Y坐标。
        w - 像素矩形的宽度。
        h - 像素矩形的高度。
        b - 要设置的乐队。
        dArray - 输入双样本数组。
        异常
        NullPointerException - 如果 NullPointerException为null。
        ArrayIndexOutOfBoundsException - 如果坐标或波段索引不在边界内,或者dArray太小而无法保持输入。