java.lang.Object
java.awt.image.MemoryImageSource
- 所有已实现的接口:
-
ImageProducer
该类是ImageProducer接口的实现,使用数组生成图像的像素值。以下是一个示例,计算一个表示沿X轴从黑色到蓝色渐变以及沿Y轴从黑色到红色渐变的100x100图像:
int w = 100;
int h = 100;
int pix[] = new int[w * h];
int index = 0;
for (int y = 0; y < h; y++) {
int red = (y * 255) / (h - 1);
for (int x = 0; x < w; x++) {
int blue = (x * 255) / (w - 1);
pix[index++] = (255 << 24) | (red << 16) | blue;
}
}
Image img = createImage(new MemoryImageSource(w, h, pix, 0, w));
MemoryImageSource还能够管理随时间变化的内存图像,以允许动画或自定义渲染。以下是一个示例,展示如何设置动画源并在数据发生变化时发出信号(改编自Garth Dickie的MemoryAnimationSourceDemo):
int pixels[];
MemoryImageSource source;
public void init() {
int width = 50;
int height = 50;
int size = width * height;
pixels = new int[size];
int value = getBackground().getRGB();
for (int i = 0; i < size; i++) {
pixels[i] = value;
}
source = new MemoryImageSource(width, height, pixels, 0, width);
source.setAnimated(true);
image = createImage(source);
}
public void run() {
Thread me = Thread.currentThread( );
me.setPriority(Thread.MIN_PRIORITY);
while (true) {
try {
Thread.sleep(10);
} catch( InterruptedException e ) {
return;
}
// 修改像素数组中的值在(x,y,w,h)
// 将新数据发送给感兴趣的ImageConsumers
source.newPixels(x, y, w, h);
}
}
- 参见:
-
Constructor Summary
ConstructorDescriptionMemoryImageSource
(int w, int h, int[] pix, int off, int scan) 构造一个ImageProducer对象,该对象使用默认RGB ColorModel中的整数数组生成图像对象的数据。MemoryImageSource
(int w, int h, int[] pix, int off, int scan, Hashtable<?, ?> props) 构造一个ImageProducer对象,该对象使用默认RGB ColorModel中的整数数组生成图像对象的数据。MemoryImageSource
(int w, int h, ColorModel cm, byte[] pix, int off, int scan) 构造一个ImageProducer对象,该对象使用字节数组生成图像对象的数据。MemoryImageSource
(int w, int h, ColorModel cm, byte[] pix, int off, int scan, Hashtable<?, ?> props) 构造一个ImageProducer对象,该对象使用字节数组生成图像对象的数据。MemoryImageSource
(int w, int h, ColorModel cm, int[] pix, int off, int scan) 构造一个ImageProducer对象,该对象使用整数数组生成图像对象的数据。MemoryImageSource
(int w, int h, ColorModel cm, int[] pix, int off, int scan, Hashtable<?, ?> props) 构造一个ImageProducer对象,该对象使用整数数组生成图像对象的数据。 -
Method Summary
Modifier and TypeMethodDescriptionvoid
将一个ImageConsumer添加到对此图像数据感兴趣的消费者列表中。boolean
确定ImageConsumer当前是否在对此图像数据感兴趣的消费者列表中。void
向任何当前对此图像数据感兴趣的ImageConsumers发送一个全新的像素缓冲区,并通知它们动画帧已完成。void
newPixels
(byte[] newpix, ColorModel newmodel, int offset, int scansize) 切换到一个新的字节数组以保存此图像的像素。void
newPixels
(int[] newpix, ColorModel newmodel, int offset, int scansize) 切换到一个新的整数数组以保存此图像的像素。void
newPixels
(int x, int y, int w, int h) 向任何当前对此图像数据感兴趣的ImageConsumers发送像素缓冲区的矩形区域,并通知它们动画帧已完成。void
newPixels
(int x, int y, int w, int h, boolean framenotify) 向任何当前对此图像数据感兴趣的ImageConsumers发送像素缓冲区的矩形区域。void
从对此图像数据感兴趣的消费者列表中移除一个ImageConsumer。void
请求给定的ImageConsumer以自上而下、从左到右的顺序再次传递图像数据。void
setAnimated
(boolean animated) 根据动画参数,将此内存图像更改为多帧动画或单帧静态图像。void
setFullBufferUpdates
(boolean fullbuffers) 指定此动画内存图像是否应始终通过发送完整的像素缓冲区来更新,每当有更改时。void
将一个ImageConsumer添加到对此图像数据感兴趣的消费者列表中,并立即通过ImageConsumer接口开始传递图像数据。
-
Constructor Details
-
MemoryImageSource
构造一个ImageProducer对象,该对象使用字节数组生成图像对象的数据。- 参数:
-
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
cm
- 指定的ColorModel
-
pix
- 像素数组 -
off
- 存储第一个像素的数组中的偏移量 -
scan
- 从数组中一行像素到下一行的距离 - 参见:
-
MemoryImageSource
public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off, int scan, Hashtable<?, ?> props) 构造一个ImageProducer对象,该对象使用字节数组生成图像对象的数据。- 参数:
-
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
cm
- 指定的ColorModel
-
pix
- 像素数组 -
off
- 存储第一个像素的数组中的偏移量 -
scan
- 从数组中一行像素到下一行的距禂 -
props
-ImageProducer
用于处理图像的属性列表 - 参见:
-
MemoryImageSource
构造一个ImageProducer对象,该对象使用整数数组生成图像对象的数据。- 参数:
-
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
cm
- 指定的ColorModel
-
pix
- 像素数组 -
off
- 存储第一个像素的数组中的偏移量 -
scan
- 从数组中一行像素到下一行的距禂 - 参见:
-
MemoryImageSource
public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off, int scan, Hashtable<?, ?> props) 构造一个ImageProducer对象,该对象使用整数数组生成图像对象的数据。- 参数:
-
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
cm
- 指定的ColorModel
-
pix
- 像素数组 -
off
- 存储第一个像素的数组中的偏移量 -
scan
- 从数组中一行像素到下一行的距禂 -
props
-ImageProducer
用于处理图像的属性列表 - 参见:
-
MemoryImageSource
public MemoryImageSource(int w, int h, int[] pix, int off, int scan) 构造一个ImageProducer对象,该对象使用默认RGB ColorModel中的整数数组生成图像对象的数据。- 参数:
-
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
pix
- 像素数组 -
off
- 存储第一个像素的数组中的偏移量 -
scan
- 从数组中一行像素到下一行的距禂 - 参见:
-
MemoryImageSource
构造一个ImageProducer对象,该对象使用默认RGB ColorModel中的整数数组生成图像对象的数据。- 参数:
-
w
- 像素矩形的宽度 -
h
- 像素矩形的高度 -
pix
- 像素数组 -
off
- 存储第一个像素的数组中的偏移量 -
scan
- 从数组中一行像素到下一行的距禂 -
props
-ImageProducer
用于处理图像的属性列表 - 参见:
-
-
Method Details
-
addConsumer
将一个ImageConsumer添加到对此图像数据感兴趣的消费者列表中。- 指定者:
-
addConsumer
在接口ImageProducer
中 - 参数:
-
ic
- 指定的ImageConsumer
- 抛出:
-
NullPointerException
- 如果指定的ImageConsumer
为null - 参见:
-
isConsumer
确定ImageConsumer当前是否在对此图像数据感兴趣的消费者列表中。- 指定者:
-
isConsumer
在接口ImageProducer
中 - 参数:
-
ic
- 指定的ImageConsumer
- 返回值:
-
true
如果ImageConsumer
在列表中; 否则为false
. - 参见:
-
removeConsumer
从对此图像数据感兴趣的消费者列表中移除一个ImageConsumer。- 指定者:
-
removeConsumer
在接口ImageProducer
中 - 参数:
-
ic
- 指定的ImageConsumer
- 参见:
-
startProduction
将一个ImageConsumer添加到对此图像数据感兴趣的消费者列表中,并立即通过ImageConsumer接口开始传递图像数据。- 指定者:
-
startProduction
在接口ImageProducer
中 - 参数:
-
ic
- 指定的ImageConsumer
图像数据通过ImageConsumer接口。 - 参见:
-
requestTopDownLeftRightResend
请求给定的ImageConsumer以自上而下、从左到右的顺序再次传递图像数据。- 指定者:
-
requestTopDownLeftRightResend
在接口ImageProducer
中 - 参数:
-
ic
- 指定的ImageConsumer
- 参见:
-
setAnimated
public void setAnimated(boolean animated) 将此内存图像更改为多帧动画或单帧静态图像,具体取决于animated参数。应在构造MemoryImageSource后立即调用此方法,并在使用它创建图像之前,以确保所有ImageConsumers将接收到正确的多帧数据。如果在设置此标志之前将ImageConsumer添加到此ImageProducer中,则该ImageConsumer将只看到连接时可用的像素数据的快照。
- 参数:
-
animated
- 如果图像是多帧动画,则为true
-
setFullBufferUpdates
public void setFullBufferUpdates(boolean fullbuffers) 指定此动画内存图像是否应始终通过发送完整的像素缓冲区来更新。如果未通过setAnimated()方法打开动画标志,则此标志将被忽略。应在构造MemoryImageSource后立即调用此方法,并在使用它创建图像之前,以确保所有ImageConsumers将接收到正确的像素传递提示。
- 参数:
-
fullbuffers
- 如果应始终发送完整的像素缓冲区,则为true
- 参见:
-
newPixels
public void newPixels()向当前对此图像数据感兴趣的任何ImageConsumers发送一个全新的像素缓冲区,并通知它们动画帧已完成。如果通过setAnimated()方法打开了动画标志,则此方法才会生效。- 参见:
-
newPixels
public void newPixels(int x, int y, int w, int h) 向当前对此图像数据感兴趣的任何ImageConsumers发送像素缓冲区的矩形区域,并通知它们动画帧已完成。如果通过setAnimated()方法打开了动画标志,则此方法才会生效。如果通过setFullBufferUpdates()方法打开了完整缓冲区更新标志,则矩形参数将被忽略,整个缓冲区将始终被发送。- 参数:
-
x
- 要发送的像素矩形的左上角的x坐标 -
y
- 要发送的像素矩形的左上角的y坐标 -
w
- 要发送的像素矩形的宽度 -
h
- 要发送的像素矩形的高度 - 参见:
-
newPixels
public void newPixels(int x, int y, int w, int h, boolean framenotify) 向当前对此图像数据感兴趣的任何ImageConsumers发送像素缓冲区的矩形区域。如果framenotify参数为true,则还会通知消费者动画帧已完成。如果通过setAnimated()方法打开了动画标志,则此方法才会生效。如果通过setFullBufferUpdates()方法打开了完整缓冲区更新标志,则矩形参数将被忽略,整个缓冲区将始终被发送。- 参数:
-
x
- 要发送的像素矩形的左上角的x坐标 -
y
- 要发送的像素矩形的左上角的y坐标 -
w
- 要发送的像素矩形的宽度 -
h
- 要发送的像素矩形的高度 -
framenotify
- 如果应向消费者发送SINGLEFRAMEDONE
通知,则为true
- 参见:
-
newPixels
更改为一个新的字节数组以保存此图像的像素。如果通过setAnimated()方法打开了动画标志,则新像素将立即传递给当前对此图像数据感兴趣的任何ImageConsumers。- 参数:
-
newpix
- 新的像素数组 -
newmodel
- 指定的ColorModel
-
offset
- 数组中的偏移量 -
scansize
- 从一个像素行到下一个像素行的距离 - 参见:
-
newPixels
更改为一个新的整数数组以保存此图像的像素。如果通过setAnimated()方法打开了动画标志,则新像素将立即传递给当前对此图像数据感兴趣的任何ImageConsumers。- 参数:
-
newpix
- 新的像素数组 -
newmodel
- 指定的ColorModel
-
offset
- 数组中的偏移量 -
scansize
- 从一个像素行到下一个像素行的距离 - 参见:
-