Java by API/java.awt.image/PixelGrabber — различия между версиями

Материал из Java эксперт
Перейти к: навигация, поиск
м (1 версия)
 
(нет различий)

Текущая версия на 14:22, 31 мая 2010

new PixelGrabber(Image img, int x, int y, int w, int h, int[] pix, int off, int scansize)

// This example is from the book _Java AWT Reference_ by John Zukowski.
// Written by John Zukowski.  Copyright (c) 1997 O"Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.image.ImageObserver;
import java.awt.image.MemoryImageSource;
import java.awt.image.PixelGrabber;
public class MainClass extends Applet {
  Image i, j, k, l;
  public void init() {
    MediaTracker mt = new MediaTracker(this);
    i = getImage(getDocumentBase(), "ora-icon.gif");
    mt.addImage(i, 0);
    try {
      mt.waitForAll();
      int width = i.getWidth(this);
      int height = i.getHeight(this);
      int pixels[] = new int[width * height];
      PixelGrabber pg = new PixelGrabber(i, 0, 0, width, height, pixels, 0, width);
      if (pg.grabPixels() && ((pg.status() & ImageObserver.ALLBITS) != 0)) {
        j = createImage(new MemoryImageSource(width, height, rowFlipPixels(pixels, width, height),
            0, width));
        k = createImage(new MemoryImageSource(width, height, colFlipPixels(pixels, width, height),
            0, width));
        l = createImage(new MemoryImageSource(height, width, rot90Pixels(pixels, width, height), 0,
            height));
      }
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
  public void paint(Graphics g) {
    g.drawImage(i, 10, 10, this); // regular
    if (j != null)
      g.drawImage(j, 150, 10, this); // rowFlip
    if (k != null)
      g.drawImage(k, 10, 60, this); // colFlip
    if (l != null)
      g.drawImage(l, 150, 60, this); // rot90
  }
  private int[] rowFlipPixels(int pixels[], int width, int height) {
    int newPixels[] = null;
    if ((width * height) == pixels.length) {
      newPixels = new int[width * height];
      int newIndex = 0;
      for (int y = height - 1; y >= 0; y--)
        for (int x = width - 1; x >= 0; x--)
          newPixels[newIndex++] = pixels[y * width + x];
    }
    return newPixels;
  }
  private int[] colFlipPixels(int pixels[], int width, int height) {
    int newPixels[] = null;
    if ((width * height) == pixels.length) {
      newPixels = new int[width * height];
      int newIndex = 0;
      for (int y = 0; y < height; y++)
        for (int x = width - 1; x >= 0; x--)
          newPixels[newIndex++] = pixels[y * width + x];
    }
    return newPixels;
  }
  private int[] rot90Pixels(int pixels[], int width, int height) {
    int newPixels[] = null;
    if ((width * height) == pixels.length) {
      newPixels = new int[width * height];
      int newIndex = 0;
      for (int x = width - 1; x >= 0; x--)
        for (int y = 0; y < height; y++)
          newPixels[newIndex++] = pixels[y * width + x];
    }
    return newPixels;
  }
}





PixelGrabber: getColorModel()

// This example is from the book _Java AWT Reference_ by John Zukowski.
// Written by John Zukowski.  Copyright (c) 1997 O"Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or
import java.applet.Applet;
import java.awt.AWTEvent;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.image.PixelGrabber;
public class MainClass extends Applet {
  Image i;
  PixelGrabber pg;
  public void init() {
    i = getImage(getDocumentBase(), "ora-icon.gif");
    pg = new PixelGrabber(i, 0, 0, -1, -1, false);
    pg.startGrabbing();
    enableEvents(AWTEvent.MOUSE_EVENT_MASK);
  }
  public void paint(Graphics g) {
    g.drawImage(i, 10, 10, this);
  }
  protected void processMouseEvent(MouseEvent e) {
    if (e.getID() == MouseEvent.MOUSE_CLICKED) {
      System.out.println("Status: " + pg.getStatus());
      System.out.println("Width:  " + pg.getWidth());
      System.out.println("Height: " + pg.getHeight());
      System.out.println("Pixels: " + (pg.getPixels() instanceof byte[] ? "bytes" : "ints"));
      System.out.println("Model:  " + pg.getColorModel());
    }
    super.processMouseEvent(e);
  }
}





PixelGrabber: getHeight()

// This example is from the book _Java AWT Reference_ by John Zukowski.
// Written by John Zukowski.  Copyright (c) 1997 O"Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or
import java.applet.Applet;
import java.awt.AWTEvent;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.image.PixelGrabber;
public class MainClass extends Applet {
  Image i;
  PixelGrabber pg;
  public void init() {
    i = getImage(getDocumentBase(), "ora-icon.gif");
    pg = new PixelGrabber(i, 0, 0, -1, -1, false);
    pg.startGrabbing();
    enableEvents(AWTEvent.MOUSE_EVENT_MASK);
  }
  public void paint(Graphics g) {
    g.drawImage(i, 10, 10, this);
  }
  protected void processMouseEvent(MouseEvent e) {
    if (e.getID() == MouseEvent.MOUSE_CLICKED) {
      System.out.println("Status: " + pg.getStatus());
      System.out.println("Width:  " + pg.getWidth());
      System.out.println("Height: " + pg.getHeight());
      System.out.println("Pixels: " + (pg.getPixels() instanceof byte[] ? "bytes" : "ints"));
      System.out.println("Model:  " + pg.getColorModel());
    }
    super.processMouseEvent(e);
  }
}





PixelGrabber: getPixels()

// This example is from the book _Java AWT Reference_ by John Zukowski.
// Written by John Zukowski.  Copyright (c) 1997 O"Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or
import java.applet.Applet;
import java.awt.AWTEvent;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.image.PixelGrabber;
public class MainClass extends Applet {
  Image i;
  PixelGrabber pg;
  public void init() {
    i = getImage(getDocumentBase(), "ora-icon.gif");
    pg = new PixelGrabber(i, 0, 0, -1, -1, false);
    pg.startGrabbing();
    enableEvents(AWTEvent.MOUSE_EVENT_MASK);
  }
  public void paint(Graphics g) {
    g.drawImage(i, 10, 10, this);
  }
  protected void processMouseEvent(MouseEvent e) {
    if (e.getID() == MouseEvent.MOUSE_CLICKED) {
      System.out.println("Status: " + pg.getStatus());
      System.out.println("Width:  " + pg.getWidth());
      System.out.println("Height: " + pg.getHeight());
      System.out.println("Pixels: " + (pg.getPixels() instanceof byte[] ? "bytes" : "ints"));
      System.out.println("Model:  " + pg.getColorModel());
    }
    super.processMouseEvent(e);
  }
}





PixelGrabber: getStatus()

// This example is from the book _Java AWT Reference_ by John Zukowski.
// Written by John Zukowski.  Copyright (c) 1997 O"Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or
import java.applet.Applet;
import java.awt.AWTEvent;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.image.PixelGrabber;
public class MainClass extends Applet {
  Image i;
  PixelGrabber pg;
  public void init() {
    i = getImage(getDocumentBase(), "ora-icon.gif");
    pg = new PixelGrabber(i, 0, 0, -1, -1, false);
    pg.startGrabbing();
    enableEvents(AWTEvent.MOUSE_EVENT_MASK);
  }
  public void paint(Graphics g) {
    g.drawImage(i, 10, 10, this);
  }
  protected void processMouseEvent(MouseEvent e) {
    if (e.getID() == MouseEvent.MOUSE_CLICKED) {
      System.out.println("Status: " + pg.getStatus());
      System.out.println("Width:  " + pg.getWidth());
      System.out.println("Height: " + pg.getHeight());
      System.out.println("Pixels: " + (pg.getPixels() instanceof byte[] ? "bytes" : "ints"));
      System.out.println("Model:  " + pg.getColorModel());
    }
    super.processMouseEvent(e);
  }
}





PixelGrabber: getWidth()

// This example is from the book _Java AWT Reference_ by John Zukowski.
// Written by John Zukowski.  Copyright (c) 1997 O"Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or
import java.applet.Applet;
import java.awt.AWTEvent;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseEvent;
import java.awt.image.PixelGrabber;
public class MainClass extends Applet {
  Image i;
  PixelGrabber pg;
  public void init() {
    i = getImage(getDocumentBase(), "ora-icon.gif");
    pg = new PixelGrabber(i, 0, 0, -1, -1, false);
    pg.startGrabbing();
    enableEvents(AWTEvent.MOUSE_EVENT_MASK);
  }
  public void paint(Graphics g) {
    g.drawImage(i, 10, 10, this);
  }
  protected void processMouseEvent(MouseEvent e) {
    if (e.getID() == MouseEvent.MOUSE_CLICKED) {
      System.out.println("Status: " + pg.getStatus());
      System.out.println("Width:  " + pg.getWidth());
      System.out.println("Height: " + pg.getHeight());
      System.out.println("Pixels: " + (pg.getPixels() instanceof byte[] ? "bytes" : "ints"));
      System.out.println("Model:  " + pg.getColorModel());
    }
    super.processMouseEvent(e);
  }
}





PixelGrabber: grabPixels()

// This example is from the book _Java AWT Reference_ by John Zukowski.
// Written by John Zukowski.  Copyright (c) 1997 O"Reilly & Associates.
// You may study, use, modify, and distribute this example for any purpose.
// This example is provided WITHOUT WARRANTY either expressed or
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.image.ImageObserver;
import java.awt.image.MemoryImageSource;
import java.awt.image.PixelGrabber;
public class MainClass extends Applet {
  Image i, j, k, l;
  public void init() {
    MediaTracker mt = new MediaTracker(this);
    i = getImage(getDocumentBase(), "ora-icon.gif");
    mt.addImage(i, 0);
    try {
      mt.waitForAll();
      int width = i.getWidth(this);
      int height = i.getHeight(this);
      int pixels[] = new int[width * height];
      PixelGrabber pg = new PixelGrabber(i, 0, 0, width, height, pixels, 0, width);
      if (pg.grabPixels() && ((pg.status() & ImageObserver.ALLBITS) != 0)) {
        j = createImage(new MemoryImageSource(width, height, rowFlipPixels(pixels, width, height),
            0, width));
        k = createImage(new MemoryImageSource(width, height, colFlipPixels(pixels, width, height),
            0, width));
        l = createImage(new MemoryImageSource(height, width, rot90Pixels(pixels, width, height), 0,
            height));
      }
    } catch (InterruptedException e) {
      e.printStackTrace();
    }
  }
  public void paint(Graphics g) {
    g.drawImage(i, 10, 10, this); // regular
    if (j != null)
      g.drawImage(j, 150, 10, this); // rowFlip
    if (k != null)
      g.drawImage(k, 10, 60, this); // colFlip
    if (l != null)
      g.drawImage(l, 150, 60, this); // rot90
  }
  private int[] rowFlipPixels(int pixels[], int width, int height) {
    int newPixels[] = null;
    if ((width * height) == pixels.length) {
      newPixels = new int[width * height];
      int newIndex = 0;
      for (int y = height - 1; y >= 0; y--)
        for (int x = width - 1; x >= 0; x--)
          newPixels[newIndex++] = pixels[y * width + x];
    }
    return newPixels;
  }
  private int[] colFlipPixels(int pixels[], int width, int height) {
    int newPixels[] = null;
    if ((width * height) == pixels.length) {
      newPixels = new int[width * height];
      int newIndex = 0;
      for (int y = 0; y < height; y++)
        for (int x = width - 1; x >= 0; x--)
          newPixels[newIndex++] = pixels[y * width + x];
    }
    return newPixels;
  }
  private int[] rot90Pixels(int pixels[], int width, int height) {
    int newPixels[] = null;
    if ((width * height) == pixels.length) {
      newPixels = new int[width * height];
      int newIndex = 0;
      for (int x = width - 1; x >= 0; x--)
        for (int y = 0; y < height; y++)
          newPixels[newIndex++] = pixels[y * width + x];
    }
    return newPixels;
  }
}