Advertisement
Guest User

revised

a guest
Jun 4th, 2012
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.12 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement