Module java.desktop
Package java.awt.image

Class MemoryImageSource

java.lang.Object
java.awt.image.MemoryImageSource
所有已实现的接口:
ImageProducer

public class MemoryImageSource extends Object implements 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

    Constructors
    Constructor
    Description
    MemoryImageSource(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 Type
    Method
    Description
    void
    将一个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接口开始传递图像数据。

    Methods declared in class java.lang.Object

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

    • MemoryImageSource

      public MemoryImageSource(int w, int h, ColorModel cm, byte[] pix, int off, int scan)
      构造一个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

      public MemoryImageSource(int w, int h, ColorModel cm, int[] pix, int off, int scan)
      构造一个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

      public MemoryImageSource(int w, int h, int[] pix, int off, int scan, Hashtable<?,?> props)
      构造一个ImageProducer对象,该对象使用默认RGB ColorModel中的整数数组生成图像对象的数据。
      参数:
      w - 像素矩形的宽度
      h - 像素矩形的高度
      pix - 像素数组
      off - 存储第一个像素的数组中的偏移量
      scan - 从数组中一行像素到下一行的距禂
      props - ImageProducer用于处理图像的属性列表
      参见:
  • Method Details

    • addConsumer

      public void addConsumer(ImageConsumer ic)
      将一个ImageConsumer添加到对此图像数据感兴趣的消费者列表中。
      指定者:
      addConsumer 在接口 ImageProducer
      参数:
      ic - 指定的ImageConsumer
      抛出:
      NullPointerException - 如果指定的ImageConsumer为null
      参见:
    • isConsumer

      public boolean isConsumer(ImageConsumer ic)
      确定ImageConsumer当前是否在对此图像数据感兴趣的消费者列表中。
      指定者:
      isConsumer 在接口 ImageProducer
      参数:
      ic - 指定的ImageConsumer
      返回值:
      true 如果ImageConsumer在列表中; 否则为false.
      参见:
    • removeConsumer

      public void removeConsumer(ImageConsumer ic)
      从对此图像数据感兴趣的消费者列表中移除一个ImageConsumer。
      指定者:
      removeConsumer 在接口 ImageProducer
      参数:
      ic - 指定的ImageConsumer
      参见:
    • startProduction

      public void startProduction(ImageConsumer ic)
      将一个ImageConsumer添加到对此图像数据感兴趣的消费者列表中,并立即通过ImageConsumer接口开始传递图像数据。
      指定者:
      startProduction 在接口 ImageProducer
      参数:
      ic - 指定的ImageConsumer图像数据通过ImageConsumer接口。
      参见:
    • requestTopDownLeftRightResend

      public void requestTopDownLeftRightResend(ImageConsumer ic)
      请求给定的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

      public void newPixels(byte[] newpix, ColorModel newmodel, int offset, int scansize)
      更改为一个新的字节数组以保存此图像的像素。如果通过setAnimated()方法打开了动画标志,则新像素将立即传递给当前对此图像数据感兴趣的任何ImageConsumers。
      参数:
      newpix - 新的像素数组
      newmodel - 指定的ColorModel
      offset - 数组中的偏移量
      scansize - 从一个像素行到下一个像素行的距离
      参见:
    • newPixels

      public void newPixels(int[] newpix, ColorModel newmodel, int offset, int scansize)
      更改为一个新的整数数组以保存此图像的像素。如果通过setAnimated()方法打开了动画标志,则新像素将立即传递给当前对此图像数据感兴趣的任何ImageConsumers。
      参数:
      newpix - 新的像素数组
      newmodel - 指定的ColorModel
      offset - 数组中的偏移量
      scansize - 从一个像素行到下一个像素行的距离
      参见: