Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- (c) 2012 Christopher Sloetjes
- www.clamcompression.com
- REVISED BY ZYNASIS! still garbage quality code, but quite a bit faster.
- */
- package genetic.demo;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.Polygon;
- import java.awt.image.BufferedImage;
- import java.io.Serializable;
- public class CompressedImage implements Serializable {
- private static final long serialVersionUID = 1L;
- public Triangle [] triangle=null;
- final BufferedImage image;
- int[][] imageData;
- public CompressedImage (BufferedImage image, int geneCount) {
- this.image=image;
- imageData = loadData(image);
- triangle = new Triangle [geneCount];
- for (int i=0;i<geneCount;i++) {
- triangle[i] = new Triangle ();
- triangle[i].randomize();
- }
- }
- public int[][] loadData(BufferedImage image) {
- int[][] imageData = new int[256][256];
- for (int x=0;x<256;x++) {
- for (int y=0;y<256;y++) {
- imageData[x][y] = image.getRGB(x, y);
- }
- }
- return imageData;
- }
- public BufferedImage render () {
- BufferedImage result = new BufferedImage (256,256,BufferedImage.TYPE_INT_RGB);
- Graphics g = result.getGraphics();
- for (int i=0;i<triangle.length;i++) {
- Polygon p = new Polygon (triangle[i].x,triangle[i].y, 3);
- g.setColor(new Color(triangle[i].c[0],triangle[i].c[1],triangle[i].c[2]));
- g.fillPolygon(p);
- }
- return result;
- }
- public int calculateFitness (BufferedImage img) {
- int result = 0;
- for (int x=0;x<256;x++) {
- for (int y=0;y<256;y++)
- {
- int c = imageData[x][y];
- int c2 = img.getRGB(x, y);
- int cred = (c >> 16) & 0x000000FF;
- int cgreen = (c >>8 ) & 0x000000FF;
- int cblue = (c) & 0x000000FF;
- int c2red = (c2 >> 16) & 0x000000FF;
- int c2green = (c2 >>8 ) & 0x000000FF;
- int c2blue = (c2) & 0x000000FF;
- result+=Math.abs(cred-c2red);
- result+=Math.abs(cgreen-c2green);
- result+=Math.abs(cblue-c2blue);
- }
- }
- return result;
- }
- Triangle t = null;
- public boolean mutate () {
- t = triangle[(Triangle.random.nextInt(triangle.length))];
- return t.mutate();
- }
- public void revert () {
- t.revert();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement