java.awt.image

接口
异常
java.lang.Object
  继承者 java.awt.image.Raster
      继承者 java.awt.image.WritableRaster

public class WritableRaster
     
extends Raster

此类扩展了 Raster 以提供像素写入功能。有关 Raster 如何存储像素的描述,请参阅 Raster 的类注释。

此类的构造方法为 protected。要实例化 WritableRaster,需使用 Raster 类中的一个 createWritableRaster 工厂方法。


字段摘要
 
从类 java.awt.image.Raster 继承的字段
dataBuffer, height, minX, minY, numBands, numDataElements, parent, sampleModel, sampleModelTranslateX, sampleModelTranslateY, width
 
构造方法摘要
protected WritableRaster(SampleModel sampleModel, DataBuffer dataBuffer, Point origin)
          构造具有给定 SampleModel 和 DataBuffer 的 WritableRaster。
protected WritableRaster(SampleModel sampleModel, DataBuffer dataBuffer, Rectangle aRegion, Point sampleModelTranslate, WritableRaster parent)
          构造具有给定 SampleModel、DataBuffer 和父亲的 WritableRaster。
protected WritableRaster(SampleModel sampleModel, Point origin)
          构造具有给定 SampleModel 的 WritableRaster。
 
方法摘要
 WritableRaster createWritableChild(int parentX, int parentY, int w, int h, int childMinX, int childMinY, int[] bandList)
          返回新的 WritableRaster,它共享此 WritableRaster 的全部或部分 DataBuffer。
 WritableRaster createWritableTranslatedChild(int childMinX, int childMinY)
          在不同的位置上创建一个与此 WritableRaster 具有相同大小、SampleModel 和 DataBuffer 的 WritableRaster。
 WritableRaster getWritableParent()
          返回此 WritableRaster 的父 WritableRaster(如果有),否则返回 null。
 void setDataElements(int x, int y, int w, int h, Object inData)
          为类型 TransferType 基本数组中的像素矩形设置数据。
 void setDataElements(int x, int y, Object inData)
          为类型 TransferType 基本数组中的单个像素设置数据。
 void setDataElements(int x, int y, Raster inRaster)
          为输入 Raster 中的像素矩形设置数据。
 void setPixel(int x, int y, double[] dArray)
          使用输入样本的 double 型数组设置 DataBuffer 中的像素。
 void setPixel(int x, int y, float[] fArray)
          使用输入样本的 float 型数组设置 DataBuffer 中的像素。
 void setPixel(int x, int y, int[] iArray)
          使用输入样本的 int 型数组设置 DataBuffer 中的像素。
 void setPixels(int x, int y, int w, int h, double[] dArray)
          为每个数组元素包含一个样本的 double 型数组中的像素矩形设置所有样本。
 void setPixels(int x, int y, int w, int h, float[] fArray)
          为每个数组元素包含一个样本的 float 型数组中的像素矩形设置所有样本。
 void setPixels(int x, int y, int w, int h, int[] iArray)
          为每个数组元素包含一个样本的 int 型数组中的像素矩形设置所有样本。
 void setRect(int dx, int dy, Raster srcRaster)
          将像素从 Raster srcRaster 复制到此 WritableRaster。
 void setRect(Raster srcRaster)
          将像素从 Raster srcRaster 复制到此 WritableRaster。
 void setSample(int x, int y, int b, double s)
          使用 double 型的输入样本,在指定 band 中为位于 DataBuffer 中 (x,y) 位置的像素设置样本。
 void setSample(int x, int y, int b, float s)
          使用 float 型的输入样本,在指定 band 中为位于 DataBuffer 中 (x,y) 位置的像素设置样本。
 void setSample(int x, int y, int b, int s)
          使用 int 型的输入样本,在指定 band 中为位于 DataBuffer 中 (x,y) 位置的像素设置样本。
 void setSamples(int x, int y, int w, int h, int b, double[] dArray)
          为每个数组元素包含一个样本的 double 型数组中指定的像素矩形在指定 band 中设置样本。
 void setSamples(int x, int y, int w, int h, int b, float[] fArray)
          为每个数组元素包含一个样本的 float 型数组中指定的像素矩形在指定 band 中设置样本。
 void setSamples(int x, int y, int w, int h, int b, int[] iArray)
          为每个数组元素包含一个样本的 int 型数组中指定的像素矩形在指定 band 中设置样本。
 
从类 java.awt.image.Raster 继承的方法
createBandedRaster, createBandedRaster, createBandedRaster, createChild, createCompatibleWritableRaster, createCompatibleWritableRaster, createCompatibleWritableRaster, createCompatibleWritableRaster, createInterleavedRaster, createInterleavedRaster, createInterleavedRaster, createPackedRaster, createPackedRaster, createPackedRaster, createPackedRaster, createRaster, createTranslatedChild, createWritableRaster, createWritableRaster, getBounds, getDataBuffer, getDataElements, getDataElements, getHeight, getMinX, getMinY, getNumBands, getNumDataElements, getParent, getPixel, getPixel, getPixel, getPixels, getPixels, getPixels, getSample, getSampleDouble, getSampleFloat, getSampleModel, getSampleModelTranslateX, getSampleModelTranslateY, getSamples, getSamples, getSamples, getTransferType, getWidth
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

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 和父亲的 WritableRaster。aRegion 指定新 Raster 的边界矩形。当向基 Raster 的坐标系转换时,基 Raster 必须包含 aRegion。(基 Raster 是 Raster 的祖先,它没有父亲)sampleModelTranslate 指定新 Raster 的 sampleModelTranslateX 值和 sampleModelTranslateY 值。 注意,此构造方法通常应该由其他构造方法或创建方法调用,不应该直接使用。

参数:
sampleModel - 指定布局的 SampleModel。
dataBuffer - 包含图像数据的 DataBuffer。
aRegion - 指定图像区域的 Rectangle。
sampleModelTranslate - 指定从 SampleModel 向 Raster 进行坐标转换的 Point。
parent - 此 raster 的父亲(如果有)。
抛出:
RasterFormatException - 如果 aRegion 的宽度和高度小于等于 0,或者 aRegion.x + aRegion.widthaRegion.y + aRegion.height 的计算结果整数溢出
方法详细信息

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 相同的 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 band 的一个子集,该子集可能通过 bandList 参数进行了重新排序。如果 bandList 为 null,则它将以其当前顺序包含当前 WritableRaster 的所有 band。

要创建新的 WritableRaster,使其包含当前 WritableRaster 的子区域,但共享其坐标系和 band,此方法在调用时应该令 childMinX 等于 parentX,childMinY 等于 parentY 且 bandList 为 null。

参数:
parentX - 此 WritableRaster 坐标中左上角的 X 坐标。
parentY - 此 WritableRaster 坐标中左上角的 Y 坐标。
w - 从 (parentX, parentY) 开始的区域宽度。
w - 从 (parentX, parentY) 开始的区域高度。
childMinX - 返回的 WritableRaster 左上角的 X 坐标。
childMinY - 返回的 WritableRaster 左上角的 Y 坐标。
bandList - band 的索引数组,取 null 则使用所有 band。
返回:
WritableRaster,它共享此 WritableRaster 全部或部分 DataBuffer
抛出:
RasterFormatException - 如果子区域位于光栅边界的外部。
RasterFormatException - 如果 wh 小于等于 0,或者 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。但是,不保证显示的边界检查。如果输入对象不为 null 且引用 TransferType 数组之外的任何数组,则会抛出 ClassCastException。

参数:
x - 像素位置的 X 坐标。
y - 像素位置的 Y 坐标。
inData - 引用类型数组的对象,该类型由 getTransferType() 定义,并且其长度 getNumDataElements() 包含到 x,y 位置的像素数据。
抛出:
ArrayIndexOutOfBoundsException - 如果坐标不在边界内部,或者 inData 太小不能容纳输入。
另请参见:
SampleModel.setDataElements(int, int, Object, DataBuffer)

setDataElements

public void setDataElements(int x,
                            int y,
                            Raster inRaster)
为输入 Raster 中的像素矩形设置数据。输入的 Raster 必须与此 WritableRaster 兼容,因为它们必须具有相同的 band,对应 band 的每个样本必须具有相同的位数,TransferType 和 NumDataElement 必须相同,并且 getDataElements/setDataElements 使用的打包方式必须一致。如果坐标不在边界内部,则可能会抛出 ArrayIndexOutOfBoundsException。但是,不保证显示的边界检查。

参数:
x - 像素位置的 X 坐标。
y - 像素位置的 Y 坐标。
inRaster - 包含 x,y 位置数据的 Raster。
抛出:
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 相同的 band 数。这是从源样本到对应的目标样本的简单复制。

如果源 Raster 和目标 Raster 的所有样本都是整型,且大小小于等于 32 位,则调用此方法等价于对源 Raster 和目标 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));
       }
 
因此,当将整型的源复制到整型的目标时,如果对于特定的 band 源样本大小大于目标样本大小,则源样本的高位将被截断。如果特定 band 的源样本大小小于目标样本大小,则根据 srcRaster 的 SampleModel 是将样本作为有符号的量还是无符号的量,对目标样本的高位进行零扩展或符号扩展。

当从一个 float 型或 double 型的源复制到整型的目标时,每个源样本强制转换为目标类型。当从整形的源复制到 float 型或 double 型的目标时,源首先使用上面的整型转换规则转换为 32-位的 int(如果需要的话),然后此 int 强制转换为 float 型或 double 型。

参数:
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 相同的 band 数。这是从源样本到对应的目标样本的简单复制。有关详细信息,请参见 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 - 输入的 float 型像素数组。
抛出:
NullPointerException - 如果 fArray 为 null。
ArrayIndexOutOfBoundsException - 如果坐标不在边界内部,或者 fArray 太小不能容纳输入。

setPixels

public void setPixels(int x,
                      int y,
                      int w,
                      int h,
                      double[] dArray)
为每个数组元素包含一个样本的 double 型数组中的像素矩形设置所有样本。如果坐标不在边界内部,则可能会抛出 ArrayIndexOutOfBoundsException。但是,不保证显示的边界检查。

参数:
x - 左上角像素位置的 X 坐标。
y - 左上角像素位置的 Y 坐标。
w - 像素矩形的宽度。
h - 像素矩形的高度。
dArray - 输入的 double 型数组。
抛出:
NullPointerException - 如果 dArray 为 null。
ArrayIndexOutOfBoundsException - 如果坐标不在边界内部,或者 dArray 太小不能容纳输入。

setSample

public void setSample(int x,
                      int y,
                      int b,
                      int s)
使用 int 型的输入样本,在指定 band 中为位于 DataBuffer 中 (x,y) 位置的像素设置样本。如果坐标不在边界内部,则可能会抛出 ArrayIndexOutOfBoundsException。但是,不保证显示的边界检查。

参数:
x - 像素位置的 X 坐标。
y - 像素位置的 Y 坐标。
b - 要设置的 band。
s - 输入样本。
抛出:
ArrayIndexOutOfBoundsException - 如果坐标或 band 索引不在边界内部。

setSample

public void setSample(int x,
                      int y,
                      int b,
                      float s)
使用 float 型的输入样本,在指定 band 中为位于 DataBuffer 中 (x,y) 位置的像素设置样本。如果坐标不在边界内部,则可能会抛出 ArrayIndexOutOfBoundsException。但是,不保证显示的边界检查。

参数:
x - 像素位置的 X 坐标。
y - 像素位置的 Y 坐标。
b - 要设置的 band。
s - 以 float 的形式输入的样本。
抛出:
ArrayIndexOutOfBoundsException - 如果坐标或 band 索引不在边界内部。

setSample

public void setSample(int x,
                      int y,
                      int b,
                      double s)
使用 double 型的输入样本,在指定 band 中为位于 DataBuffer 中 (x,y) 位置的像素设置样本。如果坐标不在边界内部,则可能会抛出 ArrayIndexOutOfBoundsException。但是,不保证显示的边界检查。

参数:
x - 像素位置的 X 坐标。
y - 像素位置的 Y 坐标。
b - 要设置的 band。
s - 以 double 形式输入的样本。
抛出:
ArrayIndexOutOfBoundsException - 如果坐标或 band 索引不在边界内部。

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 - 要设置的 band。
iArray - 输入的 int 型样本数组。
抛出:
NullPointerException - 如果 iArray 为 null。
ArrayIndexOutOfBoundsException - 如果坐标或 band 索引不在边界内部,或者 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 - 要设置的 band。
fArray - 输入的 float 型样本数组。
抛出:
NullPointerException - 如果 fArray 为 null。
ArrayIndexOutOfBoundsException - 如果坐标或 band 索引不在边界内部,或者 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 - 要设置的 band。
dArray - 输入的 double 型样本数组。
抛出:
NullPointerException - 如果 dArray 为 null。
ArrayIndexOutOfBoundsException - 如果坐标或 band 索引不在边界内,或者 dArray 太小不能容纳输入。