Java tutorial
// 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; } }