Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

revised

By: a guest on Jun 4th, 2012  |  syntax: Java  |  size: 2.12 KB  |  views: 56  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /*
  2.  
  3. (c) 2012 Christopher Sloetjes
  4.  
  5.   www.clamcompression.com
  6.  
  7. REVISED BY ZYNASIS! still garbage quality code, but quite a bit faster.
  8. */
  9.  
  10. package genetic.demo;
  11.  
  12.  
  13. import java.awt.Color;
  14. import java.awt.Graphics;
  15. import java.awt.Polygon;
  16. import java.awt.image.BufferedImage;
  17. import java.io.Serializable;
  18.  
  19. public class CompressedImage implements Serializable {
  20.         private static final long serialVersionUID = 1L;
  21.         public Triangle [] triangle=null;
  22.         final BufferedImage image;
  23.         int[][] imageData;
  24.         public CompressedImage (BufferedImage image, int geneCount) {
  25.                 this.image=image;
  26.                 imageData = loadData(image);
  27.                  
  28.                 triangle = new Triangle [geneCount];
  29.                 for (int i=0;i<geneCount;i++) {
  30.                         triangle[i] = new Triangle ();
  31.                         triangle[i].randomize();
  32.                 }
  33.         }
  34.         public int[][] loadData(BufferedImage image) {
  35.                 int[][] imageData = new int[256][256];
  36.                 for (int x=0;x<256;x++) {
  37.                         for (int y=0;y<256;y++) {
  38.                                 imageData[x][y] = image.getRGB(x, y);
  39.                         }
  40.                 }
  41.                 return imageData;
  42.         }
  43.         public BufferedImage render () {
  44.                 BufferedImage result = new BufferedImage (256,256,BufferedImage.TYPE_INT_RGB);
  45.                 Graphics g = result.getGraphics();
  46.                 for (int i=0;i<triangle.length;i++) {
  47.                         Polygon p = new Polygon (triangle[i].x,triangle[i].y, 3);                      
  48.                         g.setColor(new Color(triangle[i].c[0],triangle[i].c[1],triangle[i].c[2]));
  49.                         g.fillPolygon(p);
  50.                 }
  51.                 return result;
  52.         }
  53.         public int calculateFitness (BufferedImage img) {
  54.                 int result = 0;
  55.                 for (int x=0;x<256;x++) {
  56.                         for (int y=0;y<256;y++)
  57.                 {
  58.                         int c = imageData[x][y];
  59.                         int c2 = img.getRGB(x, y);
  60.                        
  61.                         int cred = (c >> 16) & 0x000000FF;
  62.                         int cgreen = (c >>8 ) & 0x000000FF;
  63.                         int cblue = (c) & 0x000000FF;
  64.                        
  65.                         int c2red = (c2 >> 16) & 0x000000FF;
  66.                         int c2green = (c2 >>8 ) & 0x000000FF;
  67.                         int c2blue = (c2) & 0x000000FF;
  68.  
  69.                         result+=Math.abs(cred-c2red);
  70.                         result+=Math.abs(cgreen-c2green);
  71.                         result+=Math.abs(cblue-c2blue);
  72.                 }
  73.                 }
  74.                 return result;
  75.         }
  76.        
  77.         Triangle t = null;
  78.         public boolean mutate () {
  79.                 t = triangle[(Triangle.random.nextInt(triangle.length))];
  80.                 return t.mutate();
  81.         }
  82.         public void revert () {
  83.                 t.revert();
  84.         }
  85. }