Module java.desktop
Package java.awt.image

Class WritableRaster

java.lang.Object
java.awt.image.Raster
java.awt.image.WritableRaster

public class WritableRaster extends Raster
此类扩展了 Raster 类,提供了像素写入功能。有关 Raster 存储像素方式的描述,请参阅 Raster 类的类注释。

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

  • Constructor Details

    • WritableRaster

      protected WritableRaster(SampleModel sampleModel, Point origin)
      使用给定的 SampleModel 构造一个 WritableRaster。WritableRaster 的左上角是 origin,与 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 的左上角是 origin,与 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 和父级构造一个 WritableRaster。aRegion 指定新 Raster 的边界矩形。将 aRegion 转换为基本 Raster 的坐标系时,aRegion 必须包含在基本 Raster 中(基本 Raster 是没有父级的祖先 Raster)。sampleModelTranslate 指定新 Raster 的 sampleModelTranslateX 和 sampleModelTranslateY 值。请注意,此构造函数通常应由其他构造函数或 create 方法调用,不应直接使用。
      参数:
      sampleModel - 指定布局的 SampleModel。
      dataBuffer - 包含图像数据的 DataBuffer。
      aRegion - 指定图像区域的 Rectangle。
      sampleModelTranslate - 指定从 SampleModel 到 Raster 坐标的平移的 Point。
      parent - 此栅格的父级(如果有)。
      抛出:
      RasterFormatException - 如果 aRegion 的宽度或高度小于或等于零,或计算 aRegion.x + aRegion.widthaRegion.y + aRegion.height 导致整数溢出
  • Method Details

    • getWritableParent

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

      public WritableRaster createWritableTranslatedChild(int childMinX, int childMinY)
      创建一个与当前 WritableRaster 大小、SampleModel 和 DataBuffer 相同,但位置不同的 WritableRaster。新的 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 的所有波段。

      要创建一个包含当前 WritableRaster 子区域的新 WritableRaster,但共享其坐标系和波段,应调用此方法,其中 childMinX 等于 parentX,childMinY 等于 parentY,bandList 等于 null。

      参数:
      parentX - 在此 WritableRaster 的坐标中左上角的 X 坐标。
      parentY - 在此 WritableRaster 的坐标中左上角的 Y 坐标。
      w - 从 (parentX, parentY) 开始的区域的宽度。
      h - 从 (parentX, parentY) 开始的区域的高度。
      childMinX - 返回的 WritableRaster 的左上角的 X 坐标。
      childMinY - 返回的 WritableRaster 的左上角的 Y 坐标。
      bandList - 波段索引数组,或 null 表示使用所有波段。
      返回:
      一个共享此 WritableRasterDataBuffer 的全部或部分内容的 WritableRaster
      抛出:
      RasterFormatException - 如果子区域超出了栅格边界。
      RasterFormatException - 如果 wh 小于或等于零,或计算 parentX + wparentY + hchildMinX + wchildMinY + 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。但是,不保证显式边界检查。如果输入对象不为空并且引用除 TransferType 数组之外的任何内容,将抛出 ClassCastException。
      参数:
      x - 像素位置的X坐标。
      y - 像素位置的Y坐标。
      inData - 一个对象引用,指向一个由getTransferType()定义类型和getNumDataElements()长度的数组,包含要放置在x,y位置的像素数据。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标超出范围,或者inData太小无法容纳输入。
      参见:
    • setDataElements

      public void setDataElements(int x, int y, Raster inRaster)
      从输入的Raster设置像素矩形的数据。输入的Raster必须与此WritableRaster兼容,即它们必须具有相同数量的波段,对应的波段必须具有相同数量的每个样本的位数,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太小无法容纳输入。
      参见:
    • setRect

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

      如果源和目标Raster的所有样本都是整数类型且大小不超过32位,则调用此方法等效于对两个Raster中有效的所有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将样本视为有符号或无符号数量而进行零扩展或符号扩展。

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

      参数:
      srcRaster - 要从中复制像素的Raster。
      抛出:
      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 - 要从中复制像素的Raster。
      抛出:
      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)
      使用double数组的样本设置DataBuffer中的像素。如果坐标超出范围,则可能会抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 像素位置的X坐标。
      y - 像素位置的Y坐标。
      dArray - double数组中的输入样本。
      抛出:
      NullPointerException - 如果dArray为null。
      ArrayIndexOutOfBoundsException - 如果坐标超出范围,或者dArray太小无法容纳输入。
    • 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 - 如果dArray为null。
      ArrayIndexOutOfBoundsException - 如果坐标超出范围,或者dArray太小无法容纳输入。
    • setSample

      public void setSample(int x, int y, int b, int s)
      使用int类型的输入,在DataBuffer中的位置(x,y)处的像素的指定波段中设置一个样本。如果坐标超出范围,则可能抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 像素位置的X坐标。
      y - 像素位置的Y坐标。
      b - 要设置的波段。
      s - 输入样本。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标或波段索引超出范围。
    • setSample

      public void setSample(int x, int y, int b, float s)
      使用float类型的输入,在DataBuffer中的位置(x,y)处的像素的指定波段中设置一个样本。如果坐标超出范围,则可能抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 像素位置的X坐标。
      y - 像素位置的Y坐标。
      b - 要设置的波段。
      s - 作为float的输入样本。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标或波段索引超出范围。
    • setSample

      public void setSample(int x, int y, int b, double s)
      使用double类型的输入,在DataBuffer中的位置(x,y)处的像素的指定波段中设置一个样本。如果坐标超出范围,则可能抛出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数组中设置指定像素矩形的指定波段的样本。如果坐标超出范围,则可能抛出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数组中设置指定像素矩形的指定波段的样本。如果坐标超出范围,则可能抛出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数组中设置指定像素矩形的指定波段的样本。如果坐标超出范围,则可能抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 左上角像素位置的X坐标。
      y - 左上角像素位置的Y坐标。
      w - 像素矩形的宽度。
      h - 像素矩形的高度。
      b - 要设置的波段。
      dArray - 输入的double样本数组。
      抛出:
      NullPointerException - 如果dArray为null。
      ArrayIndexOutOfBoundsException - 如果坐标或波段索引超出范围,或者dArray太小无法容纳输入。