Module java.desktop
Package java.awt.image

Class Raster

java.lang.Object
java.awt.image.Raster
直接已知的子类:
WritableRaster

public class Raster extends Object
代表像素矩形数组的类。 Raster封装了存储样本值的DataBuffer和描述如何在DataBuffer中定位给定样本值的SampleModel。

Raster定义了占据平面特定矩形区域的像素的值,不一定包括(0, 0)。该矩形,称为Raster的边界矩形,并可通过getBounds方法获得,由minX,minY,width和height值定义。minX和minY值定义了Raster左上角的坐标。对边界矩形之外的像素的引用可能导致抛出异常,或者可能导致引用Raster关联的DataBuffer的意外元素。用户有责任避免访问这样的像素。

SampleModel描述了如何将Raster的样本存储在DataBuffer的原始数组元素中。样本可以存储在每个数据元素中,如PixelInterleavedSampleModel或BandedSampleModel中,也可以打包为几个元素,如SinglePixelPackedSampleModel或MultiPixelPackedSampleModel中。SampleModel还控制样本是否进行符号扩展,允许将无符号数据存储在带符号Java数据类型(如byte,short和int)中。

虽然Raster可以存在于平面的任何位置,但SampleModel使用从(0, 0)开始的简单坐标系。因此,Raster包含一个平移因子,允许在Raster的坐标系和SampleModel的坐标系之间映射像素位置。从SampleModel坐标系到Raster坐标系的平移可以通过getSampleModelTranslateX和getSampleModelTranslateY方法获得。

Raster可以通过显式构造或使用createChild和createTranslatedChild方法与另一个Raster共享DataBuffer。通过这些方法创建的Raster可以通过getParent方法返回对它们从中创建的Raster的引用。对于不是通过调用createTranslatedChild或createChild来构造的Raster,getParent将返回null。

createTranslatedChild方法返回一个新的Raster,它共享当前Raster的所有数据,但占据具有相同宽度和高度但具有不同起始点的边界矩形。例如,如果父Raster占据区域(10, 10)到(100, 100),并且定义了从(50, 50)开始的翻译Raster,则父级的像素(20, 20)和子级的像素(60, 60)占据两个Raster共享的DataBuffer中的相同位置。在第一种情况下,应将(-10,-10)添加到像素坐标以获得相应的SampleModel坐标,在第二种情况下,应添加(-50,-50)。

通过从父Raster的sampleModelTranslateX和sampleModelTranslateY值中减去子Raster的值,可以确定父Raster和子Raster之间的平移。

createChild方法可用于创建仅占据其父边界矩形的子集(具有相同或翻译的坐标系)或具有其父边界矩形的一部分的子集的新Raster。

所有构造函数都是受保护的。创建Raster的正确方法是使用此类中定义的静态create方法之一。这些方法创建使用标准Interleaved,Banded和Packed SampleModels的Raster实例,并且可能比通过组合外部生成的SampleModel和DataBuffer创建的Raster更有效地处理。

参见:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected DataBuffer
    存储图像数据的DataBuffer。
    protected int
    此Raster的高度。
    protected int
    此Raster左上角像素的X坐标。
    protected int
    此Raster左上角像素的Y坐标。
    protected int
    Raster中的波段数。
    protected int
    每像素的DataBuffer数据元素数。
    protected Raster
    此Raster的父级,或null。
    protected SampleModel
    描述如何将此Raster的像素存储在DataBuffer中的SampleModel。
    protected int
    从Raster的SampleModel的坐标系到Raster的X平移。
    protected int
    从Raster的SampleModel的坐标系到Raster的Y平移。
    protected int
    此Raster的宽度。
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    Raster(SampleModel sampleModel, DataBuffer dataBuffer, Point origin)
    使用给定的SampleModel和DataBuffer构造Raster。
    protected
    Raster(SampleModel sampleModel, DataBuffer dataBuffer, Rectangle aRegion, Point sampleModelTranslate, Raster parent)
    使用给定的SampleModel,DataBuffer和父级构造Raster。
    protected
    Raster(SampleModel sampleModel, Point origin)
    使用给定的SampleModel构造Raster。
  • Method Summary

    Modifier and Type
    Method
    Description
    createBandedRaster(int dataType, int w, int h, int scanlineStride, int[] bankIndices, int[] bandOffsets, Point location)
    基于具有指定数据类型,宽度,高度,扫描线跨距,bank索引和波段偏移的BandedSampleModel创建Raster。
    createBandedRaster(int dataType, int w, int h, int bands, Point location)
    基于具有指定数据类型,宽度,高度和波段数的BandedSampleModel创建Raster。
    createBandedRaster(DataBuffer dataBuffer, int w, int h, int scanlineStride, int[] bankIndices, int[] bandOffsets, Point location)
    基于具有指定DataBuffer,宽度,高度,扫描线跨距,bank索引和波段偏移的BandedSampleModel创建Raster。
    createChild(int parentX, int parentY, int width, int height, int childMinX, int childMinY, int[] bandList)
    返回一个新的Raster,它共享此Raster的全部或部分DataBuffer。
    创建一个与此Raster大小相同,具有相同SampleModel和新初始化DataBuffer的兼容WritableRaster。
    创建一个具有指定大小,新SampleModel和新初始化DataBuffer的兼容WritableRaster。
    createCompatibleWritableRaster(int x, int y, int w, int h)
    创建一个具有指定位置(minX,minY)和大小(宽度,高度),新SampleModel和新初始化DataBuffer的兼容WritableRaster。
    创建一个具有由rect指定的位置(minX,minY)和大小(宽度,高度)的兼容WritableRaster,新SampleModel和新初始化DataBuffer。
    createInterleavedRaster(int dataType, int w, int h, int scanlineStride, int pixelStride, int[] bandOffsets, Point location)
    基于具有指定数据类型,宽度,高度,扫描线跨距,像素跨距和波段偏移的PixelInterleavedSampleModel创建Raster。
    createInterleavedRaster(int dataType, int w, int h, int bands, Point location)
    基于具有指定数据类型,宽度,高度和波段数的PixelInterleavedSampleModel创建Raster。
    createInterleavedRaster(DataBuffer dataBuffer, int w, int h, int scanlineStride, int pixelStride, int[] bandOffsets, Point location)
    基于具有指定DataBuffer,宽度,高度,扫描线跨距,像素跨距和波段偏移的PixelInterleavedSampleModel创建Raster。
    createPackedRaster(int dataType, int w, int h, int[] bandMasks, Point location)
    基于具有指定数据类型,宽度,高度和波段掩码的SinglePixelPackedSampleModel创建Raster。
    createPackedRaster(int dataType, int w, int h, int bands, int bitsPerBand, Point location)
    基于具有指定数据类型,宽度,高度,波段数和每波段位数的打包SampleModel创建Raster。
    createPackedRaster(DataBuffer dataBuffer, int w, int h, int scanlineStride, int[] bandMasks, Point location)
    基于具有指定DataBuffer,宽度,高度,扫描线跨距和波段掩码的SinglePixelPackedSampleModel创建Raster。
    createPackedRaster(DataBuffer dataBuffer, int w, int h, int bitsPerPixel, Point location)
    基于具有指定DataBuffer,宽度,高度和每像素位数的MultiPixelPackedSampleModel创建Raster。
    static Raster
    createRaster(SampleModel sm, DataBuffer db, Point location)
    使用指定的SampleModel和DataBuffer创建Raster。
    createTranslatedChild(int childMinX, int childMinY)
    创建一个与此Raster大小,SampleModel和DataBuffer相同,但位置不同的Raster。
    使用指定的SampleModel和DataBuffer创建WritableRaster。
    使用指定的SampleModel创建WritableRaster。
    返回此Raster的边界矩形。
    返回与此Raster关联的DataBuffer。
    getDataElements(int x, int y, int w, int h, Object outData)
    返回TransferType类型的原始数组中指定像素矩形的像素数据。
    getDataElements(int x, int y, Object outData)
    返回TransferType类型的原始数组中指定像素的数据。
    final int
    返回Raster的像素高度。
    final int
    返回Raster的最小有效X坐标。
    final int
    返回Raster的最小有效Y坐标。
    final int
    返回此Raster中的波段数(每像素样本数)。
    final int
    返回通过getDataElements和setDataElements方法传输一个像素所需的数据元素数。
    返回此Raster的父Raster(如果有)或null。
    double[]
    getPixel(int x, int y, double[] dArray)
    返回指定像素的双精度数组中的样本。
    float[]
    getPixel(int x, int y, float[] fArray)
    返回指定像素的浮点数组中的样本。
    int[]
    getPixel(int x, int y, int[] iArray)
    返回指定像素的整数数组中的样本。
    double[]
    getPixels(int x, int y, int w, int h, double[] dArray)
    返回一个双精度数组,其中包含矩形像素的所有样本,每个数组元素一个样本。
    float[]
    getPixels(int x, int y, int w, int h, float[] fArray)
    返回一个浮点数组,其中包含矩形像素的所有样本,每个数组元素一个样本。
    int[]
    getPixels(int x, int y, int w, int h, int[] iArray)
    返回一个整数数组,其中包含矩形像素的所有样本,每个数组元素一个样本。
    int
    getSample(int x, int y, int b)
    返回位于(x,y)处的像素的指定波段的样本作为整数。
    double
    getSampleDouble(int x, int y, int b)
    返回位于(x,y)处的像素的指定波段的样本作为双精度。
    float
    getSampleFloat(int x, int y, int b)
    返回位于(x,y)处的像素的指定波段的样本作为浮点数。
    返回描述图像数据布局的SampleModel。
    final int
    返回从SampleModel的坐标系到Raster的X平移。
    final int
    返回从SampleModel的坐标系到Raster的Y平移。
    double[]
    getSamples(int x, int y, int w, int h, int b, double[] dArray)
    返回双精度数组中指定像素矩形的指定波段的样本,每个数组元素一个样本。
    float[]
    getSamples(int x, int y, int w, int h, int b, float[] fArray)
    返回浮点数组中指定像素矩形的指定波段的样本,每个数组元素一个样本。
    int[]
    getSamples(int x, int y, int w, int h, int b, int[] iArray)
    返回整数数组中指定像素矩形的指定波段的样本,每个数组元素一个样本。
    final int
    返回用于通过getDataElements和setDataElements方法传输像素的TransferType。
    final int
    返回Raster的像素宽度。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • sampleModel

      protected SampleModel sampleModel
      描述如何将此Raster的像素存储在DataBuffer中的SampleModel。
    • dataBuffer

      protected DataBuffer dataBuffer
      存储图像数据的DataBuffer。
    • minX

      protected int minX
      此Raster左上角像素的X坐标。
    • minY

      protected int minY
      该栅格的左上像素的Y坐标。
    • width

      protected int width
      该栅格的宽度。
    • height

      protected int height
      该栅格的高度。
    • sampleModelTranslateX

      protected int sampleModelTranslateX
      从栅格的SampleModel的坐标空间到栅格本身坐标空间的X平移量。
    • sampleModelTranslateY

      protected int sampleModelTranslateY
      从栅格的SampleModel的坐标空间到栅格本身坐标空间的Y平移量。
    • numBands

      protected int numBands
      栅格中的波段数。
    • numDataElements

      protected int numDataElements
      每个像素的DataBuffer数据元素数。
    • parent

      protected Raster parent
      该栅格的父级,如果没有则为null。
  • Constructor Details

    • Raster

      protected Raster(SampleModel sampleModel, Point origin)
      使用给定的SampleModel构造一个栅格。栅格的左上角是原点,与SampleModel大小相同。会自动创建一个足够描述栅格的DataBuffer。
      参数:
      sampleModel - 指定布局的SampleModel
      origin - 指定原点的Point
      抛出:
      RasterFormatException - 如果计算origin.x + sampleModel.getWidth()origin.y + sampleModel.getHeight()导致整数溢出
      NullPointerException - 如果sampleModelorigin为null
    • Raster

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

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

    • createInterleavedRaster

      public static WritableRaster createInterleavedRaster(int dataType, int w, int h, int bands, Point location)
      基于具有指定数据类型、宽度、高度和波段数的PixelInterleavedSampleModel创建一个栅格。

      栅格的左上角由location参数给出。如果location为null,则将使用(0, 0)。dataType参数应为DataBuffer类中定义的枚举值之一。

      目前不支持交错的DataBuffer.TYPE_INT栅格。要创建类型为DataBuffer.TYPE_INT的1波段栅格,请使用Raster.createPackedRaster()。

      目前仅支持的数据类型是TYPE_BYTE和TYPE_USHORT。

      参数:
      dataType - 用于存储样本的数据类型
      w - 图像数据的像素宽度
      h - 图像数据的像素高度
      bands - 波段数
      location - Raster的左上角
      返回:
      具有指定数据类型、宽度、高度和波段数的WritableRaster对象。
      抛出:
      IllegalArgumentException - 如果dataType不是受支持的数据类型之一
      IllegalArgumentException - 如果bands小于1
      IllegalArgumentException - 如果wh都不大于0
      IllegalArgumentException - 如果wh的乘积大于Integer.MAX_VALUE
      RasterFormatException - 如果计算location.x + wlocation.y + h导致整数溢出
    • createInterleavedRaster

      public static WritableRaster createInterleavedRaster(int dataType, int w, int h, int scanlineStride, int pixelStride, int[] bandOffsets, Point location)
      基于具有指定数据类型、宽度、高度、扫描线跨度、像素跨度和波段偏移的PixelInterleavedSampleModel创建一个栅格。从bandOffsets.length推断出波段数。

      栅格的左上角由location参数给出。如果location为null,则将使用(0, 0)。dataType参数应为DataBuffer类中定义的枚举值之一。

      目前不支持交错的DataBuffer.TYPE_INT栅格。要创建类型为DataBuffer.TYPE_INT的1波段栅格,请使用Raster.createPackedRaster()。

      目前仅支持的数据类型是TYPE_BYTE和TYPE_USHORT。

      参数:
      dataType - 用于存储样本的数据类型
      w - 图像数据的像素宽度
      h - 图像数据的像素高度
      scanlineStride - 图像数据的行跨度
      pixelStride - 图像数据的像素跨度
      bandOffsets - 所有波段的偏移量
      location - Raster的左上角
      返回:
      具有指定数据类型、宽度、高度、扫描线跨度、像素跨度和波段偏移的WritableRaster对象。
      抛出:
      IllegalArgumentException - 如果dataType不是受支持的数据类型,即DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORT
      IllegalArgumentException - 如果wh都不大于0
      IllegalArgumentException - 如果wh的乘积大于Integer.MAX_VALUE
      RasterFormatException - 如果计算location.x + wlocation.y + h导致整数溢出
      IllegalArgumentException - 如果scanlineStride小于0
      IllegalArgumentException - 如果pixelStride小于0
      NullPointerException - 如果bandOffsets为null
    • createBandedRaster

      public static WritableRaster createBandedRaster(int dataType, int w, int h, int bands, Point location)
      基于具有指定数据类型、宽度、高度和波段数的BandedSampleModel创建一个栅格。

      栅格的左上角由location参数给出。如果location为null,则将使用(0, 0)。dataType参数应为DataBuffer类中定义的枚举值之一。

      目前仅支持的数据类型是TYPE_BYTE、TYPE_USHORT和TYPE_INT。

      参数:
      dataType - 用于存储样本的数据类型
      w - 图像数据的像素宽度
      h - 图像数据的像素高度
      bands - 波段数量
      location - Raster 的左上角
      返回:
      具有指定数据类型、宽度、高度和波段数的 WritableRaster 对象。
      抛出:
      IllegalArgumentException - 如果 dataType 不是受支持的数据类型之一,即 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT
      IllegalArgumentException - 如果 wh 都不大于 0
      IllegalArgumentException - 如果 wh 的乘积大于 Integer.MAX_VALUE
      IllegalArgumentException - 如果计算 location.x + wlocation.y + h 会导致整数溢出
      ArrayIndexOutOfBoundsException - 如果 bands 小于 1
    • createBandedRaster

      public static WritableRaster createBandedRaster(int dataType, int w, int h, int scanlineStride, int[] bankIndices, int[] bandOffsets, Point location)
      基于具有指定数据类型、宽度、高度、扫描线跨度、银行索引和波段偏移的 BandedSampleModel 创建一个 Raster。波段数量由 bankIndices.length 和 bandOffsets.length 推断,它们必须相同。

      Raster 的左上角由 location 参数给出。dataType 参数应该是 DataBuffer 类中定义的枚举值之一。

      目前仅支持的数据类型是 TYPE_BYTE、TYPE_USHORT 和 TYPE_INT。

      参数:
      dataType - 用于存储样本的数据类型
      w - 图像数据的像素宽度
      h - 图像数据的像素高度
      scanlineStride - 图像数据的行跨度
      bankIndices - 每个波段的银行索引
      bandOffsets - 所有波段的偏移量
      location - Raster 的左上角
      返回:
      具有指定数据类型、宽度、高度、扫描线跨度、银行索引和波段偏移的 WritableRaster 对象。
      抛出:
      IllegalArgumentException - 如果 dataType 不是受支持的数据类型之一,即 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT
      IllegalArgumentException - 如果 wh 都不大于 0
      IllegalArgumentException - 如果 wh 的乘积大于 Integer.MAX_VALUE
      IllegalArgumentException - 如果计算 location.x + wlocation.y + h 会导致整数溢出
      IllegalArgumentException - 如果 scanlineStride 小于 0
      ArrayIndexOutOfBoundsException - 如果 bankIndicesnull
      NullPointerException - 如果 bandOffsetsnull
    • createPackedRaster

      public static WritableRaster createPackedRaster(int dataType, int w, int h, int[] bandMasks, Point location)
      基于具有指定数据类型、宽度、高度和波段掩码的 SinglePixelPackedSampleModel 创建一个 Raster。波段数量由 bandMasks.length 推断。

      Raster 的左上角由 location 参数给出。如果 location 为 null,则使用 (0, 0)。dataType 参数应该是 DataBuffer 类中定义的枚举值之一。

      目前仅支持的数据类型是 TYPE_BYTE、TYPE_USHORT 和 TYPE_INT。

      参数:
      dataType - 用于存储样本的数据类型
      w - 图像数据的像素宽度
      h - 图像数据的像素高度
      bandMasks - 包含每个波段的条目的数组
      location - Raster 的左上角
      返回:
      具有指定数据类型、宽度、高度和波段掩码的 WritableRaster 对象。
      抛出:
      RasterFormatException - 如果 wh 小于或等于零,或计算 location.x + wlocation.y + h 会导致整数溢出
      IllegalArgumentException - 如果 dataType 不是受支持的数据类型之一,即 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT
    • createPackedRaster

      public static WritableRaster createPackedRaster(int dataType, int w, int h, int bands, int bitsPerBand, Point location)
      基于具有指定数据类型、宽度、高度、波段数量和每个波段的位数的 packed SampleModel 创建一个 Raster。如果波段数量为 1,则 SampleModel 将是 MultiPixelPackedSampleModel。

      如果波段数量大于 1,则 SampleModel 将是 SinglePixelPackedSampleModel,每个波段具有 bitsPerBand 位。在任一情况下,必须满足相应 SampleModel 强加的 dataType 和 bitsPerBand 的要求。

      Raster 的左上角由 location 参数给出。如果 location 为 null,则使用 (0, 0)。dataType 参数应该是 DataBuffer 类中定义的枚举值之一。

      目前仅支持的数据类型是 TYPE_BYTE、TYPE_USHORT 和 TYPE_INT。

      参数:
      dataType - 用于存储样本的数据类型
      w - 图像数据的像素宽度
      h - 图像数据的像素高度
      bands - 波段数量
      bitsPerBand - 每个波段的位数
      location - Raster 的左上角
      返回:
      具有指定数据类型、宽度、高度、波段数量和每个波段的位数的 WritableRaster 对象。
      抛出:
      RasterFormatException - 如果 wh 小于或等于零,或计算 location.x + wlocation.y + h 会导致整数溢出
      IllegalArgumentException - 如果 bitsPerBandbands 的乘积大于 dataType 所持有的位数
      IllegalArgumentException - 如果 bitsPerBandbands 不大于零
      IllegalArgumentException - 如果 dataType 不是受支持的数据类型之一,即 DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT
    • createInterleavedRaster

      public static WritableRaster createInterleavedRaster(DataBuffer dataBuffer, int w, int h, int scanlineStride, int pixelStride, int[] bandOffsets, Point location)
      基于具有指定 DataBuffer、宽度、高度、扫描线跨度、像素跨度和波段偏移的 PixelInterleavedSampleModel 创建一个 Raster。波段数量由 bandOffsets.length 推断。Raster 的左上角由 location 参数给出。如果 location 为 null,则使用 (0, 0)。

      请注意,不支持交错的 DataBuffer.TYPE_INT Rasters。要创建类型为 DataBuffer.TYPE_INT 的 1 波段 Raster,请使用 Raster.createPackedRaster()。

      参数:
      dataBuffer - 包含图像数据的DataBuffer
      w - 图像数据的像素宽度
      h - 图像数据的像素高度
      scanlineStride - 图像数据的扫描线跨度
      pixelStride - 图像数据的像素跨度
      bandOffsets - 所有波段的偏移量
      location - Raster 的左上角
      返回:
      具有指定DataBuffer、宽度、高度、扫描线跨度、像素跨度和波段偏移量的WritableRaster对象。
      抛出:
      IllegalArgumentException - 如果dataType不是受支持的数据类型之一,即DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORT
      NullPointerException - 如果dataBuffer为null
      IllegalArgumentException - 如果dataType不是受支持的数据类型之一,即DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORT
      RasterFormatException - 如果dataBuffer具有多个存储区。
      IllegalArgumentException - 如果wh都不大于0
      IllegalArgumentException - 如果wh的乘积大于Integer.MAX_VALUE
      RasterFormatException - 如果计算location.x + wlocation.y + h导致整数溢出
      IllegalArgumentException - 如果scanlineStride小于0
      IllegalArgumentException - 如果pixelStride小于0
      NullPointerException - 如果bandOffsets为null
    • createBandedRaster

      public static WritableRaster createBandedRaster(DataBuffer dataBuffer, int w, int h, int scanlineStride, int[] bankIndices, int[] bandOffsets, Point location)
      基于具有指定DataBuffer、宽度、高度、扫描线跨度、存储区索引和波段偏移量的BandedSampleModel创建一个Raster。波段数量从bankIndices.length和bandOffsets.length推断出,它们必须相同。Raster的左上角由location参数给出。如果location为null,则将使用(0, 0)。
      参数:
      dataBuffer - 包含图像数据的DataBuffer
      w - 图像数据的像素宽度
      h - 图像数据的像素高度
      scanlineStride - 图像数据的扫描线跨度
      bankIndices - 每个波段的存储区索引
      bandOffsets - 所有波段的偏移量
      location - Raster 的左上角
      返回:
      具有指定DataBuffer、宽度、高度、扫描线跨度、存储区索引和波段偏移量的WritableRaster对象。
      抛出:
      NullPointerException - 如果dataBuffer为null,或者bankIndices为null,或者bandOffsets为null
      IllegalArgumentException - 如果dataType不是受支持的数据类型之一,即DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT,或者wh小于或等于零,或者wh的乘积大于Integer.MAX_VALUE,或者scanlineStride小于零,或者bankIndices的长度不等于bandOffsets的长度
      RasterFormatException - 如果计算location.x + wlocation.y + h导致整数溢出
    • createPackedRaster

      public static WritableRaster createPackedRaster(DataBuffer dataBuffer, int w, int h, int scanlineStride, int[] bandMasks, Point location)
      基于具有指定DataBuffer、宽度、高度、扫描线跨度和波段掩码的SinglePixelPackedSampleModel创建一个Raster。波段数量从bandMasks.length推断出。Raster的左上角由location参数给出。如果location为null,则将使用(0, 0)。
      参数:
      dataBuffer - 包含图像数据的DataBuffer
      w - 图像数据的像素宽度
      h - 图像数据的像素高度
      scanlineStride - 图像数据的扫描线跨度
      bandMasks - 包含每个波段的条目的数组
      location - Raster 的左上角
      返回:
      具有指定DataBuffer、宽度、高度、扫描线跨度和波段掩码的WritableRaster对象。
      抛出:
      RasterFormatException - 如果wh小于或等于零,或者计算location.x + wlocation.y + h导致整数溢出
      IllegalArgumentException - 如果dataBuffer不是受支持的数据类型之一,即DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT
      RasterFormatException - 如果dataBuffer具有多个存储区。
      NullPointerException - 如果dataBuffer为null
    • createPackedRaster

      public static WritableRaster createPackedRaster(DataBuffer dataBuffer, int w, int h, int bitsPerPixel, Point location)
      基于具有指定DataBuffer、宽度、高度和每像素位数的MultiPixelPackedSampleModel创建一个Raster。Raster的左上角由location参数给出。如果location为null,则将使用(0, 0)。
      参数:
      dataBuffer - 包含图像数据的DataBuffer
      w - 图像数据的像素宽度
      h - 图像数据的像素高度
      bitsPerPixel - 每像素的位数
      location - Raster 的左上角
      返回:
      具有指定DataBuffer、宽度、高度和每像素位数的WritableRaster对象。
      抛出:
      RasterFormatException - 如果wh小于或等于零,或者计算location.x + wlocation.y + h导致整数溢出
      IllegalArgumentException - 如果dataType不是受支持的数据类型之一,即DataBuffer.TYPE_BYTEDataBuffer.TYPE_USHORTDataBuffer.TYPE_INT
      RasterFormatException - 如果dataBuffer具有多个存储区。
      NullPointerException - 如果dataBuffer为null
    • createRaster

      public static Raster createRaster(SampleModel sm, DataBuffer db, Point location)
      创建具有指定SampleModel和DataBuffer的Raster。Raster的左上角由location参数给出。如果location为null,则将使用(0, 0)。
      参数:
      sm - 指定的SampleModel
      db - 指定的DataBuffer
      location - Raster 的左上角
      返回:
      具有指定SampleModelDataBuffer和位置的Raster
      抛出:
      RasterFormatException - 如果计算location.x + sm.getWidth()location.y + sm.getHeight()导致整数溢出
      RasterFormatException - 如果db具有多个存储区且sm是PixelInterleavedSampleModel、SinglePixelPackedSampleModel或MultiPixelPackedSampleModel。
      NullPointerException - 如果SampleModel或DataBuffer为null
    • createWritableRaster

      public static WritableRaster createWritableRaster(SampleModel sm, Point location)
      创建具有指定SampleModel的WritableRaster。Raster的左上角由location参数给出。如果location为null,则将使用(0, 0)。
      参数:
      sm - 指定的SampleModel
      location - WritableRaster 的左上角
      返回:
      具有指定SampleModel和位置的WritableRaster
      抛出:
      RasterFormatException - 如果计算location.x + sm.getWidth()location.y + sm.getHeight()导致整数溢出
    • createWritableRaster

      public static WritableRaster createWritableRaster(SampleModel sm, DataBuffer db, Point location)
      创建具有指定SampleModel和DataBuffer的WritableRaster。Raster的左上角由location参数给出。如果location为null,则将使用(0, 0)。
      参数:
      sm - 指定的SampleModel
      db - 指定的DataBuffer
      location - WritableRaster的左上角
      返回:
      一个带有指定SampleModelDataBuffer和位置的WritableRaster
      抛出:
      RasterFormatException - 如果计算location.x + sm.getWidth()location.y + sm.getHeight()导致整数溢出
      RasterFormatException - 如果db有多个bank且sm是PixelInterleavedSampleModel、SinglePixelPackedSampleModel或MultiPixelPackedSampleModel。
      NullPointerException - 如果SampleModel或DataBuffer为null
    • getParent

      public Raster getParent()
      返回此Raster的父Raster(如果有)或null。
      返回:
      父Raster或null
    • getSampleModelTranslateX

      public final int getSampleModelTranslateX()
      返回从SampleModel的坐标系到Raster的X平移。要将像素的X坐标从Raster坐标系转换为SampleModel坐标系,必须减去此值。
      返回:
      从Raster的SampleModel的坐标空间到Raster的X平移。
    • getSampleModelTranslateY

      public final int getSampleModelTranslateY()
      返回从SampleModel的坐标系到Raster的Y平移。要将像素的Y坐标从Raster坐标系转换为SampleModel坐标系,必须减去此值。
      返回:
      从Raster的SampleModel的坐标空间到Raster的Y平移。
    • createCompatibleWritableRaster

      public WritableRaster createCompatibleWritableRaster()
      创建一个与此Raster大小相同、具有相同SampleModel和新初始化DataBuffer的兼容WritableRaster。
      返回:
      一个具有相同样本模型和新数据缓冲区的兼容WritableRaster
    • createCompatibleWritableRaster

      public WritableRaster createCompatibleWritableRaster(int w, int h)
      创建一个具有指定大小、新SampleModel和新初始化DataBuffer的兼容WritableRaster。
      参数:
      w - 新WritableRaster的指定宽度
      h - 新WritableRaster的指定高度
      返回:
      一个具有指定大小和新样本模型和数据缓冲区的兼容WritableRaster
      抛出:
      RasterFormatException - 如果宽度或高度小于或等于零。
    • createCompatibleWritableRaster

      public WritableRaster createCompatibleWritableRaster(Rectangle rect)
      使用由rect指定的位置(minX,minY)和大小(宽度,高度)创建一个具有新SampleModel和新初始化DataBuffer的兼容WritableRaster。
      参数:
      rect - 指定WritableRaster的大小和位置的Rectangle
      返回:
      一个具有指定大小和位置以及新样本模型和数据缓冲区的兼容WritableRaster
      抛出:
      RasterFormatException - 如果rect的宽度或高度小于或等于零,或计算rect.x + rect.widthrect.y + rect.height导致整数溢出
      NullPointerException - 如果rect为null
    • createCompatibleWritableRaster

      public WritableRaster createCompatibleWritableRaster(int x, int y, int w, int h)
      使用指定位置(minX,minY)和大小(宽度,高度)创建一个具有新SampleModel和新初始化DataBuffer的兼容WritableRaster。
      参数:
      x - WritableRaster的左上角的X坐标
      y - WritableRaster的左上角的Y坐标
      w - WritableRaster的指定宽度
      h - WritableRaster的指定高度
      返回:
      一个具有指定大小和位置以及新样本模型和数据缓冲区的兼容WritableRaster
      抛出:
      RasterFormatException - 如果wh小于或等于零,或计算x + wy + h导致整数溢出
    • createTranslatedChild

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

      public Raster createChild(int parentX, int parentY, int width, int height, int childMinX, int childMinY, int[] bandList)
      返回一个新的Raster,它共享此Raster的全部或部分DataBuffer。新的Raster将拥有对当前Raster的引用,可通过其getParent()方法访问。

      parentX、parentY、width和height参数在此Raster的坐标空间中形成一个Rectangle,指示要共享的像素区域。如果此Rectangle不包含在当前Raster的边界内,将抛出错误。

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

      新的Raster可以被定义为仅包含当前Raster的一部分波段,可能通过bandList参数重新排序。如果bandList为null,则假定它包含当前Raster的所有波段,按照它们当前的顺序。

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

      参数:
      parentX - 此Raster坐标中左上角的X坐标
      parentY - 此Raster坐标中左上角的Y坐标
      width - 从(parentX,parentY)开始的区域的宽度
      height - 从(parentX,parentY)开始的区域的高度
      childMinX - 返回的Raster左上角的X坐标
      childMinY - 返回的Raster左上角的Y坐标
      bandList - 波段索引数组,或null以使用所有波段
      返回:
      一个新的Raster
      抛出:
      RasterFormatException - 如果指定的子区域在栅格边界之外。
      RasterFormatException - 如果widthheight小于或等于零,或计算任何parentX + widthparentY + heightchildMinX + widthchildMinY + height导致整数溢出
    • getBounds

      public Rectangle getBounds()
      返回此Raster的边界Rectangle。此函数返回与getMinX/MinY/Width/Height相同的信息。
      返回:
      Raster的边界框。
    • getMinX

      public final int getMinX()
      返回Raster的最小有效X坐标。
      返回:
      Raster的最小x坐标。
    • getMinY

      public final int getMinY()
      返回Raster的最小有效Y坐标。
      返回:
      Raster的最小y坐标。
    • getWidth

      public final int getWidth()
      返回Raster的像素宽度。
      返回:
      Raster的宽度。
    • getHeight

      public final int getHeight()
      返回Raster的像素高度。
      返回:
      Raster的高度。
    • getNumBands

      public final int getNumBands()
      返回此Raster中的波段数(每像素样本数)。
      返回:
      Raster的波段数。
    • getNumDataElements

      public final int getNumDataElements()
      返回通过getDataElements和setDataElements方法传输一个像素所需的数据元素数。当通过这些方法传输像素时,它们可能以打包或未打包的格式传输,这取决于底层SampleModel的实现。使用这些方法,像素作为由getTransferType()给出的原始类型的getNumDataElements()元素数组传输。TransferType可能与DataBuffer的存储数据类型相同也可能不同。
      返回:
      数据元素的数量。
    • getTransferType

      public final int getTransferType()
      返回用于通过getDataElements和setDataElements方法传输像素的TransferType。当通过这些方法传输像素时,它们可能以打包或未打包的格式传输,这取决于底层SampleModel的实现。使用这些方法,像素作为由getTransferType()给出的原始类型的getNumDataElements()元素数组传输。TransferType可能与DataBuffer的存储数据类型相同也可能不同。TransferType将是DataBuffer中定义的类型之一。
      返回:
      此传输类型。
    • getDataBuffer

      public DataBuffer getDataBuffer()
      返回与此Raster关联的DataBuffer。
      返回:
      RasterDataBuffer
    • getSampleModel

      public SampleModel getSampleModel()
      返回描述图像数据布局的SampleModel。
      返回:
      此Raster的SampleModel
    • getDataElements

      public Object getDataElements(int x, int y, Object outData)
      返回以TransferType类型的原始数组中的单个像素的数据。对于Java 2D(tm) API支持的图像数据,这将是DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT、DataBuffer.TYPE_INT、DataBuffer.TYPE_SHORT、DataBuffer.TYPE_FLOAT或DataBuffer.TYPE_DOUBLE中的一个。数据可能以打包格式返回,从而提高数据传输的效率。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。如果输入对象非空并引用除TransferType数组之外的任何内容,则将抛出ClassCastException。
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      outData - 一个对象引用,指向由getTransferType()定义的类型和长度为getNumDataElements()的数组。如果为null,将分配一个适当类型和大小的数组
      返回:
      一个对象引用,指向由getTransferType()定义的类型的数组,其中包含请求的像素数据。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标超出范围,或者outData太小无法容纳输出。
      参见:
    • getDataElements

      public Object getDataElements(int x, int y, int w, int h, Object outData)
      返回以TransferType类型的原始数组中指定像素矩形的像素数据。对于Java 2D API支持的图像数据,这将是DataBuffer.TYPE_BYTE、DataBuffer.TYPE_USHORT、DataBuffer.TYPE_INT、DataBuffer.TYPE_SHORT、DataBuffer.TYPE_FLOAT或DataBuffer.TYPE_DOUBLE中的一个。数据可能以打包格式返回,从而提高数据传输的效率。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。如果输入对象非空并引用除TransferType数组之外的任何内容,则将抛出ClassCastException。
      参数:
      x - 左上角像素位置的X坐标
      y - 左上角像素位置的Y坐标
      w - 像素矩形的宽度
      h - 像素矩形的高度
      outData - 一个对象引用,指向由getTransferType()定义的类型和长度为w*h*getNumDataElements()的数组。如果为null,将分配一个适当类型和大小的数组。
      返回:
      一个对象引用,指向由getTransferType()定义的类型的数组,其中包含请求的像素数据。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标超出范围,或者outData太小无法容纳输出。
      参见:
    • getPixel

      public int[] getPixel(int x, int y, int[] iArray)
      返回指定像素的int数组中的样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      iArray - 可选的预分配int数组
      返回:
      指定像素的样本。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标超出范围,或者iArray太小无法容纳输出。
    • getPixel

      public float[] getPixel(int x, int y, float[] fArray)
      返回指定像素的float数组中的样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      fArray - 可选的预分配float数组
      返回:
      指定像素的样本。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标超出范围,或者fArray太小无法容纳输出。
    • getPixel

      public double[] getPixel(int x, int y, double[] dArray)
      返回指定像素的double数组中的样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      dArray - 可选的预分配double数组
      返回:
      指定像素的样本。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标超出范围,或者dArray太小无法容纳输出。
    • getPixels

      public int[] getPixels(int x, int y, int w, int h, int[] iArray)
      返回包含像素矩形中所有样本的int数组,每个数组元素一个样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 左上角像素位置的X坐标
      y - 左上角像素位置的Y坐标
      w - 像素矩形的宽度
      h - 像素矩形的高度
      iArray - 可选的预分配int数组
      返回:
      指定像素矩形的样本。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标超出范围,或者iArray太小无法容纳输出。
    • getPixels

      public float[] getPixels(int x, int y, int w, int h, float[] fArray)
      返回包含像素矩形中所有样本的float数组,每个数组元素一个样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      w - 像素矩形的宽度
      h - 像素矩形的高度
      fArray - 可选的预分配float数组
      返回:
      指定像素矩形的样本。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标超出范围,或者fArray太小无法容纳输出。
    • getPixels

      public double[] getPixels(int x, int y, int w, int h, double[] dArray)
      返回包含像素矩形中所有样本的double数组,每个数组元素一个样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 左上角像素位置的X坐标
      y - 左上角像素位置的Y坐标
      w - 像素矩形的宽度
      h - 像素矩形的高度
      dArray - 可选的预分配double数组
      返回:
      指定像素矩形的样本。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标超出范围,或者dArray太小无法容纳输出。
    • getSample

      public int getSample(int x, int y, int b)
      返回位于(x,y)处的像素的指定波段中的样本作为int。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      b - 要返回的波段
      返回:
      指定坐标处像素的指定波段中的样本。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标或波段索引超出范围。
    • getSampleFloat

      public float getSampleFloat(int x, int y, int b)
      返回位于(x,y)处的像素的指定波段中的样本作为float。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      b - 要返回的波段
      返回:
      指定坐标处像素的指定波段中的样本。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标或波段索引超出范围。
    • getSampleDouble

      public double getSampleDouble(int x, int y, int b)
      返回位于(x,y)处的像素的指定波段中的样本作为double。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 像素位置的X坐标
      y - 像素位置的Y坐标
      b - 要返回的波段
      返回:
      指定坐标处像素指定波段的样本。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标或波段索引超出范围。
    • getSamples

      public int[] getSamples(int x, int y, int w, int h, int b, int[] iArray)
      返回指定矩形像素中指定波段的样本,每个数组元素一个样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 左上角像素位置的X坐标
      y - 左上角像素位置的Y坐标
      w - 像素矩形的宽度
      h - 像素矩形的高度
      b - 要返回的波段
      iArray - 可选的预分配整型数组
      返回:
      指定矩形像素中指定波段的样本。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标或波段索引超出范围,或者iArray太小无法容纳输出。
    • getSamples

      public float[] getSamples(int x, int y, int w, int h, int b, float[] fArray)
      返回指定矩形像素中指定波段的样本,每个数组元素一个样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 左上角像素位置的X坐标
      y - 左上角像素位置的Y坐标
      w - 像素矩形的宽度
      h - 像素矩形的高度
      b - 要返回的波段
      fArray - 可选的预分配浮点数组
      返回:
      指定矩形像素中指定波段的样本。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标或波段索引超出范围,或者fArray太小无法容纳输出。
    • getSamples

      public double[] getSamples(int x, int y, int w, int h, int b, double[] dArray)
      返回指定矩形像素中指定波段的样本,每个数组元素一个样本。如果坐标超出范围,可能会抛出ArrayIndexOutOfBoundsException。但是,不保证显式边界检查。
      参数:
      x - 左上角像素位置的X坐标
      y - 左上角像素位置的Y坐标
      w - 像素矩形的宽度
      h - 像素矩形的高度
      b - 要返回的波段
      dArray - 可选的预分配双精度数组
      返回:
      指定矩形像素中指定波段的样本。
      抛出:
      ArrayIndexOutOfBoundsException - 如果坐标或波段索引超出范围,或者dArray太小无法容纳输出。