Möjligheterna till bildmanipulationer är rika i Java. Den här appleten läser in ett
par bilder, som den hämtar alla pixlar från. Pixlarna ligger i en heltalsarray. Pixlarna
används till att återskapa nya bilder, som formats efter en sinuskurva.
Klassen PixelFabrik
package mogges;
import java.awt.image.BufferedImage;
import java.awt.image.PixelGrabber;
public class PixelFabrik {
public static int[] getPixels(BufferedImage bild, int w, int h) {
int[] pixlar = new int[w * h];
try {
PixelGrabber gr = new PixelGrabber(bild, 0, 0, w, h, pixlar, 0, w);
gr.grabPixels();
} catch (Exception error) {
}
return pixlar;
}
}
Klassen Flaggor
package mogges;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.image.BufferedImage;
import java.awt.image.MemoryImageSource;
public class Flaggor extends Applet implements Runnable {
public static final int WIDTH = 300;
public static final int HEIGHT = 200;
private BufferedImage base;
private int flagg_w;
private int flagg_h;
int[] basdata;
private Image produkt;
private Thread thread = null;
private Image bakgrund;
private Graphics g;
private double yr, yf, r;
public void init() {
bakgrund = createImage(WIDTH, HEIGHT);
g = bakgrund.getGraphics();
flagg_w = WIDTH - 150;
flagg_h = HEIGHT - 80;
base = new BufferedImage(flagg_w, flagg_h, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = base.createGraphics();
Image in = getImage(getDocumentBase(), "logo2.png");
MediaTracker tr = new MediaTracker(this);
try {
tr.addImage(in, 0);
tr.waitForAll();
} catch (Exception error) {
}
g2.setColor(new Color(0, 0, 0));
g2.fillRect(0, 0, flagg_w, flagg_h);
g2.drawImage(in, 20, 20, this);
in = getImage(getDocumentBase(), "logo.png");
try {
tr.addImage(in, 0);
tr.waitForAll();
} catch (Exception error) {
}
g2.drawImage(in, 20, flagg_h - 40, this);
basdata = PixelFabrik.getPixels(base, flagg_w, flagg_h);
produkt = createImage();
yr = 0;
yf = 8;
r = 0;
}
private Image createImage() {
int[] produktdata = new int[WIDTH * HEIGHT];
for (int i = 0; i < produktdata.length; i++)
produktdata[i] = 16777215;
for (int x = 0; x < WIDTH; x++) {
r += 2.39;
yr = yf * Math.sin(Math.toRadians(r));
int iyr = (int) yr;
for (int y = 0; y < HEIGHT; y++) {
if (x > 9 && x <= flagg_w - 10 && y + iyr > 9
&& y + iyr < flagg_h - 10) {
try {
produktdata[((y) * WIDTH) + x] = basdata[((y + iyr) * flagg_w)+ x];
} catch (Exception error) {
}
}
}
}
MemoryImageSource source = new MemoryImageSource(WIDTH, HEIGHT,
produktdata, 0, WIDTH);
return createImage(source);
}
public void paint(Graphics page) {
g.setColor(new Color(255, 255, 255));
g.fillRect(0, 0, WIDTH, HEIGHT);
g.drawImage(createImage(), 0, 0, this);
try {
Thread.sleep(10);
} catch (InterruptedException error) {
};
page.drawImage(bakgrund, 0, 0, this);
}
public void update(Graphics page) {
paint(page);
}
public void start() {
if (thread == null) {
thread = new Thread(this);
thread.start();
}
}
public void stop() {
thread = null;
}
@Override
public void run() {
while (thread != null) {
repaint();
try {
Thread.sleep(5);
} catch (InterruptedException error) {
System.out.println(error);
}
}
}
}