Guest User

Untitled

a guest
Feb 10th, 2016
4,802
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.awt.Color;
  2. import java.awt.Graphics2D;
  3. import java.awt.image.BufferedImage;
  4. import java.awt.image.ColorModel;
  5. import java.awt.image.WritableRaster;
  6. import java.io.File;
  7. import java.io.IOException;
  8.  
  9. import javax.imageio.ImageIO;
  10.  
  11. public class Liner {
  12.     public static void main(String[] args) throws IOException {
  13.         BufferedImage anIm = ImageIO.read(new File("083A3004.png"));
  14.         createBlue(anIm);
  15.        
  16.         BufferedImage bi = new BufferedImage(anIm.getWidth(), anIm.getHeight(), BufferedImage.TYPE_INT_ARGB);
  17.         Graphics2D g = bi.createGraphics();
  18.         g.setColor(Color.white);
  19.         g.fillRect(0, 0, bi.getWidth(), bi.getHeight());
  20.         g.dispose();
  21.        
  22.         int[] ori = new int[anIm.getWidth()*anIm.getHeight()];
  23.         createArray(anIm, ori);
  24.        
  25.         int[] array1 = new int[anIm.getWidth()*anIm.getHeight()];
  26.        
  27.         long bestScore = Long.MAX_VALUE;
  28.         for (int q = 0; q < 500; q++) {
  29.             BufferedImage best = deepCopy(bi);
  30.             for (int r = 0; r < 30; r++) {
  31.                 BufferedImage copy = deepCopy(bi);
  32.                 drawRandomLine(copy);
  33.                 array1 = createArray(copy, array1);
  34.                 long newScore = score(ori, array1);
  35.                 if (newScore < bestScore) {
  36.                     best = deepCopy(copy);
  37.                     bestScore = newScore;
  38.                 }
  39.             }
  40.             System.out.println(bestScore);
  41.             System.out.println(q);
  42.             bi = deepCopy(best);
  43.         }
  44.  
  45.         ImageIO.write(bi, "png", new File("out.png"));
  46.     }
  47.  
  48.     static BufferedImage deepCopy(BufferedImage bi) {
  49.         ColorModel cm = bi.getColorModel();
  50.         boolean isAlphaPremultiplied = cm.isAlphaPremultiplied();
  51.         WritableRaster raster = bi.copyData(null);
  52.         return new BufferedImage(cm, raster, isAlphaPremultiplied, null);
  53.     }
  54.  
  55.     public static void createBlue(BufferedImage anImg) {
  56.         int[] anArray = new int[anImg.getWidth() * anImg.getHeight()];
  57.         anArray = createArray(anImg, anArray);
  58.         for (int q = 0; q < anArray.length; q++) {
  59.             anArray[q] = anArray[q] & 0xFF0000FF;
  60.         }
  61.         anImg.setRGB(0, 0, anImg.getWidth(), anImg.getHeight(), anArray, 0, anImg.getWidth());
  62.     }
  63.  
  64.     public static int[] createArray(BufferedImage anImg, int[] array) {
  65.         return anImg.getRGB(0, 0, anImg.getWidth(), anImg.getHeight(), array, 0, anImg.getWidth());
  66.     }
  67.  
  68.     public static long score(int[] ori, int[] comp) {
  69.         long score = 0;
  70.         for (int q = 0; q < ori.length; q++) {
  71.             score += Math.abs((ori[q] & 0xff) - (comp[q] & 0xff));
  72.         }
  73.         return score;
  74.     }
  75.  
  76.     public static void drawRandomLine(BufferedImage anImage) {
  77.         Graphics2D g = (Graphics2D) anImage.createGraphics();
  78.         g.setColor(new Color(0f,0f,0f,(float)Math.random()*0.3f +0.2f));
  79.        
  80.         double x1 = Math.random() * anImage.getWidth();
  81.         double x2 = Math.random() * anImage.getWidth();
  82.         double y1 = Math.random() * anImage.getHeight();
  83.         double y2 = Math.random() * anImage.getHeight();
  84.        
  85.         // left top = 0;
  86.         // left right = 1;
  87.         // left bot = 2;
  88.         // top right = 3;
  89.         // top bot = 4;
  90.         // right bot = 5;
  91.         switch((int)(Math.random()*6)) {
  92.         case 0:
  93.             x1 = 0;
  94.             y2 = 0;
  95.             break;
  96.         case 1:
  97.             x1 = 0;
  98.             x2 = anImage.getWidth();
  99.             break;
  100.         case 2:
  101.             x1 = 0;
  102.             y2 = anImage.getHeight();
  103.             break;
  104.         case 3:
  105.             y1 = 0;
  106.             x2 = anImage.getWidth();
  107.             break;
  108.         case 4:
  109.             y1 = 0;
  110.             y2 = anImage.getHeight();
  111.             break;
  112.         case 5:
  113.             x1 = anImage.getWidth();
  114.             y2 = anImage.getHeight();
  115.             break;
  116.         }
  117.        
  118.         g.drawLine((int) x1, (int) y1, (int) x2, (int) y2);
  119.         g.dispose();
  120.     }
  121.  
  122. }
RAW Paste Data