Guest User

4 point cropping

a guest
Jan 29th, 2016
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.11 KB | None | 0 0
  1. import java.awt.Point;
  2. import java.awt.image.BufferedImage;
  3. import java.util.ArrayList;
  4.  
  5. import si.matej.piracerx.pathfinding.Place_2D;
  6.  
  7. public class BufferedImageUtils {
  8.     public static BufferedImage getSubImage(BufferedImage buf, Point p1, Point p2, Point p3, Point p4, Point p5) {
  9.         BufferedImage cleared = new BufferedImage(buf.getWidth(), buf.getHeight(), BufferedImage.TYPE_INT_ARGB);
  10.         boolean[][] pixels = new boolean[buf.getWidth()][buf.getHeight()];
  11.         ArrayList<Point> p00 = Place_2D.line(p1, p2);
  12.         for (int i = 0; i < p00.size(); i++) {
  13.             pixels[p00.get(i).x][p00.get(i).y] = true;
  14.         }
  15.         ArrayList<Point> p01 = Place_2D.line(p2, p3);
  16.         for (int i = 0; i < p01.size(); i++) {
  17.             pixels[p01.get(i).x][p01.get(i).y] = true;
  18.         }
  19.         ArrayList<Point> p02 = Place_2D.line(p3, p4);
  20.         for (int i = 0; i < p02.size(); i++) {
  21.             pixels[p02.get(i).x][p02.get(i).y] = true;
  22.         }
  23.         ArrayList<Point> p03 = Place_2D.line(p4, p1);
  24.         for (int i = 0; i < p03.size(); i++) {
  25.             pixels[p03.get(i).x][p03.get(i).y] = true;
  26.         }
  27.         fillArea(p5.x, p5.y, pixels);
  28.  
  29.         for (int i = 0; i < buf.getWidth(); i++)
  30.             for (int j = 0; j < buf.getHeight(); j++)
  31.                 if (pixels[i][j])
  32.                     cleared.setRGB(i, j, buf.getRGB(i, j));
  33.                 else
  34.                     cleared.setRGB(i, j, 0x00000000);
  35.  
  36.         return crop(cleared, p1, p2, p3, p4);
  37.     }
  38.  
  39.     public static BufferedImage crop(BufferedImage buf, Point p1, Point p2, Point p3, Point p4) {
  40.         int[] xs = new int[4];
  41.         xs[0] = p1.x;
  42.         xs[1] = p2.x;
  43.         xs[2] = p3.x;
  44.         xs[3] = p4.x;
  45.         int[] ys = new int[4];
  46.         ys[0] = p1.y;
  47.         ys[1] = p2.y;
  48.         ys[2] = p3.y;
  49.         ys[3] = p4.y;
  50.        
  51.         return buf.getSubimage(getMinValue(xs), getMinValue(ys),getMaxValue(xs) - getMinValue(xs), getMaxValue(ys) - getMinValue(ys));
  52.     }
  53.  
  54.     public static int getMaxValue(int[] array) {
  55.         int maxValue = array[0];
  56.         for (int i = 1; i < array.length; i++) {
  57.             if (array[i] > maxValue) {
  58.                 maxValue = array[i];
  59.  
  60.             }
  61.         }
  62.         return maxValue;
  63.     }
  64.  
  65.     public static int getMinValue(int[] array) {
  66.         int minValue = array[0];
  67.         for (int i = 1; i < array.length; i++) {
  68.             if (array[i] < minValue) {
  69.                 minValue = array[i];
  70.             }
  71.         }
  72.         return minValue;
  73.     }
  74.  
  75.     public static boolean[][] fillArea(int x, int y, boolean[][] arr) {
  76.         int maxX = arr.length - 1;
  77.         int maxY = arr[0].length - 1;
  78.         int[][] stack = new int[(maxX + 1) * (maxY + 1)][2];
  79.         int index = 0;
  80.  
  81.         stack[0][0] = x;
  82.         stack[0][1] = y;
  83.         arr[x][y] = true;
  84.  
  85.         while (index >= 0) {
  86.             x = stack[index][0];
  87.             y = stack[index][1];
  88.             index--;
  89.  
  90.             if ((x > 0) && (arr[x - 1][y] == false)) {
  91.                 arr[x - 1][y] = true;
  92.                 index++;
  93.                 stack[index][0] = x - 1;
  94.                 stack[index][1] = y;
  95.             }
  96.  
  97.             if ((x < maxX) && (arr[x + 1][y] == false)) {
  98.                 arr[x + 1][y] = true;
  99.                 index++;
  100.                 stack[index][0] = x + 1;
  101.                 stack[index][1] = y;
  102.             }
  103.  
  104.             if ((y > 0) && (arr[x][y - 1] == false)) {
  105.                 arr[x][y - 1] = true;
  106.                 index++;
  107.                 stack[index][0] = x;
  108.                 stack[index][1] = y - 1;
  109.             }
  110.  
  111.             if ((y < maxY) && (arr[x][y + 1] == false)) {
  112.                 arr[x][y + 1] = true;
  113.                 index++;
  114.                 stack[index][0] = x;
  115.                 stack[index][1] = y + 1;
  116.             }
  117.         }
  118.         return arr;
  119.     }
  120. }
Advertisement
Add Comment
Please, Sign In to add comment