public class MemoryImageSource extends Object implements ImageProducer
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还能够管理随时间变化的存储器映像,以允许动画或自定义渲染。
下面是一个示例,显示如何设置数据中的动画源和信号变化(由Gart 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; } // Modify the values in the pixels array at (x, y, w, h) // Send the new data to the interested ImageConsumers source.newPixels(x, y, w, h); } }
ImageProducer
Constructor and Description |
---|
MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off, int scan)
构造一个ImageProducer对象,它使用一个字节数组来生成一个Image对象的数据。
|
MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off, int scan, Hashtable<?,?> props)
构造一个ImageProducer对象,它使用一个字节数组来生成一个Image对象的数据。
|
MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off, int scan)
构造一个ImageProducer对象,该对象使用整数数组来生成Image对象的数据。
|
MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off, int scan, Hashtable<?,?> props)
构造一个ImageProducer对象,该对象使用整数数组来生成Image对象的数据。
|
MemoryImageSource(int w, int h, int[] pix, int off, int scan)
构造一个ImageProducer对象,它使用默认RGB ColorModel中的整数数组来生成一个Image对象的数据。
|
MemoryImageSource(int w, int h, int[] pix, int off, int scan, Hashtable<?,?> props)
构造一个ImageProducer对象,它使用默认RGB ColorModel中的整数数组来生成一个Image对象的数据。
|
Modifier and Type | Method and Description |
---|---|
void |
addConsumer(ImageConsumer ic)
将ImageConsumer添加到对该图像的数据感兴趣的用户列表中。
|
boolean |
isConsumer(ImageConsumer ic)
确定ImageConsumer是否在目前对该图像的数据感兴趣的消费者列表中。
|
void |
newPixels()
向目前对此图像的数据感兴趣的任何ImageConsumers发送一个全新的像素缓冲区,并通知他们动画帧完成。
|
void |
newPixels(byte[] newpix, ColorModel newmodel, int offset, int scansize)
更改新的字节数组来保存此图像的像素。
|
void |
newPixels(int[] newpix, ColorModel newmodel, int offset, int scansize)
更改一个新的int数组来保存此图像的像素。
|
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 |
removeConsumer(ImageConsumer ic)
从对该图像的数据感兴趣的消费者列表中删除一个ImageConsumer。
|
void |
requestTopDownLeftRightResend(ImageConsumer ic)
请求给定的ImageConsumer具有从上到下的顺序递送多次的图像数据。
|
void |
setAnimated(boolean animated)
根据动画参数,将此内存图像更改为多帧动画或单帧静态图像。
|
void |
setFullBufferUpdates(boolean fullbuffers)
指定是否应始终通过发送像素的完整缓冲区来更新此动画内存映像。
|
void |
startProduction(ImageConsumer ic)
将ImageConsumer添加到对该图像的数据感兴趣的用户列表中,并通过ImageConsumer界面立即开始传送图像数据。
|
public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off, int scan)
w
- 像素矩形的宽度
h
- 像素
h
的高度
cm
- 指定的
ColorModel
pix
- 像素阵列
off
- 数组中第一个像素存储位置的偏移量
scan
- 从阵列中的一行像素到下一个像素的距离
Component.createImage(java.awt.image.ImageProducer)
public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off, int scan, Hashtable<?,?> props)
w
- 像素矩形的宽度
h
- 像素
h
的高度
cm
- 指定的
ColorModel
pix
- 像素数组
off
- 将阵列中的偏移量保存在第一个像素的位置
scan
- 阵列中一行像素到下一行的距离
props
-
ImageProducer
用于处理图像的
ImageProducer
列表
Component.createImage(java.awt.image.ImageProducer)
public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off, int scan)
w
- 像素矩形的宽度
h
- 像素
h
的高度
cm
- 指定的
ColorModel
pix
- 像素数组
off
- 将数组的偏移量存储在第一个像素的位置
scan
- 从阵列中的一行像素到下一个像素的距离
Component.createImage(java.awt.image.ImageProducer)
public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off, int scan, Hashtable<?,?> props)
w
- 像素矩形的宽度
h
- 像素
h
的高度
cm
- 指定的
ColorModel
pix
- 像素数组
off
- 数组中存储第一个像素的位置的偏移量
scan
- 阵列中一行像素到下一行的距离
props
-
ImageProducer
用于处理图像的
ImageProducer
列表
Component.createImage(java.awt.image.ImageProducer)
public MemoryImageSource(int w, int h, int[] pix, int off, int scan)
w
- 像素矩形的宽度
h
- 像素
h
的高度
pix
- 像素数组
off
- 数组中偏移量存储第一个像素的位置
scan
- 从阵列中的一行像素到下一个像素的距离
Component.createImage(java.awt.image.ImageProducer)
,
ColorModel.getRGBdefault()
public MemoryImageSource(int w, int h, int[] pix, int off, int scan, Hashtable<?,?> props)
w
- 像素矩形的宽度
h
- 像素
h
的高度
pix
- 像素阵列
off
- 数组中第一个像素存放位置的偏移量
scan
- 从阵列中的一行像素到下一个像素的距离
props
-
ImageProducer
用于处理图像的
ImageProducer
列表
Component.createImage(java.awt.image.ImageProducer)
,
ColorModel.getRGBdefault()
public void addConsumer(ImageConsumer ic)
addConsumer
在界面
ImageProducer
ic
- 指定的
ImageConsumer
NullPointerException
- 如果指定的
ImageConsumer
为空
ImageConsumer
public boolean isConsumer(ImageConsumer ic)
isConsumer
在界面
ImageProducer
ic
- 指定的
ImageConsumer
true
如果ImageConsumer
在列表上;
false
否则。
ImageConsumer
public void removeConsumer(ImageConsumer ic)
removeConsumer
在界面
ImageProducer
ic
- 指定的
ImageConsumer
ImageConsumer
public void startProduction(ImageConsumer ic)
startProduction
在界面
ImageProducer
ic
- 通过ImageConsumer界面指定的
ImageConsumer
图像数据。
ImageConsumer
public void requestTopDownLeftRightResend(ImageConsumer ic)
requestTopDownLeftRightResend
在界面
ImageProducer
ic
- 指定的
ImageConsumer
ImageConsumer
public void setAnimated(boolean animated)
应该在构建MemoryImageSource之后立即调用此方法,并在使用它创建映像之前立即调用该方法,以确保所有ImageConsumers都将接收到正确的多帧数据。 如果在设置此标志之前将ImageConsumer添加到此ImageProducer,则该ImageConsumer将仅在连接时可以看到像素数据的快照。
animated
-
true
如果图像是多帧动画
public void setFullBufferUpdates(boolean fullbuffers)
应该在构建MemoryImageSource之后立即调用此方法,并在使用它创建映像之前立即调用该方法,以确保所有ImageConsumers都将收到正确的像素传送提示。
fullbuffers
-
true
如果始终发送完整的像素缓冲区
setAnimated(boolean)
public void newPixels()
public void newPixels(int x, int y, int w, int h)
x
- 要发送的像素矩形的左上角的x坐标
y
- 要发送的像素矩形左上角的y坐标
w
- 要发送的像素
w
的宽度
h
- 要发送的像素
h
的高度
newPixels(int, int, int, int, boolean)
, ImageConsumer
, setAnimated(boolean)
, setFullBufferUpdates(boolean)
public void newPixels(int x, int y, int w, int h, boolean framenotify)
x
- 要发送的像素矩形的左上角的x坐标
y
- 要发送的像素矩形左上角的y坐标
w
- 要发送的像素
w
的宽度
h
- 要发送的像素
h
的高度
framenotify
-
true
如果消费者应该发送一个
SINGLEFRAMEDONE
通知
ImageConsumer
, setAnimated(boolean)
, setFullBufferUpdates(boolean)
public void newPixels(byte[] newpix, ColorModel newmodel, int offset, int scansize)
newpix
- 新的像素阵列
newmodel
- 指定的
ColorModel
offset
- 数组中的偏移量
scansize
- 从阵列中的一行像素到下一个像素的距离
newPixels(int, int, int, int, boolean)
,
setAnimated(boolean)
public void newPixels(int[] newpix, ColorModel newmodel, int offset, int scansize)
newpix
- 新的像素阵列
newmodel
- 指定的
ColorModel
offset
- 数组中的偏移量
scansize
- 从阵列中的一行像素到下一个像素的距离
newPixels(int, int, int, int, boolean)
,
setAnimated(boolean)