Test
import java.awt.Color;
import java.awt.image.BufferedImage;
public class DividirImagen {
//private BufferedImage imageActual;
public int[][] matriz;
public static BufferedImage recortar(BufferedImage img, int cuadrante) throws Exception{
// _________
// | 0 | 1 |
// |____|____|
// | 3 | 2 |
// |____|____|
//
int w = img.getWidth(), h = img.getHeight();
BufferedImage recorte;
switch (cuadrante) {
case 0:recorte=img.getSubimage(0, 0, w/2, h/2);
break;
case 1:recorte=img.getSubimage(w/2, 0, w/2, h/2);
break;
case 3:recorte=img.getSubimage(0, h/2, w/2, h/2);
break;
case 2:recorte=img.getSubimage(w/2, h/2, w/2, h/2);
break;
default:
throw new Exception("Error con cuadrante");
}
return recorte;
}
public static int validarColor(BufferedImage img, int x, int y) {
Color color;
color = new Color(img.getRGB(x, y));
int r = color.getRed();
int g = color.getGreen();
int b = color.getBlue();
if (r == 255 && g == 255 && b == 255) {
// el pixel es blanco
return 1;
}
// El pixel es negro
return 0;
}
public static QuadTree ArmarA(BufferedImage img) throws Exception{
Integer c = -1;
QuadNodo r;
if(img.getHeight() == 2 && img.getWidth()==2){
//Se crean 4 hojas con su respectivo color
QuadNodo c0 = new QuadNodo(validarColor(img,0,0));
QuadNodo c1 = new QuadNodo(validarColor(img,1,0));
QuadNodo c2 = new QuadNodo(validarColor(img,1,1));
QuadNodo c3 = new QuadNodo(validarColor(img,0,1));
//Revisamos si los nodos son blancos
if(c2.getColor()==1 && c1.getColor()==1 && c0.getColor()==1 && c3.getColor()==1){
//El padre de los nodos es una hoja blanca
r = new QuadNodo(1);
}else
if(c2.getColor()==0 && c1.getColor()==0 && c0.getColor()==0 && c3.getColor()==0){
//El padre de los nodos es hoja negra
r = new QuadNodo(0);
}
else{
//Si tiene hijos variados entonces se le setean al padre
r = new QuadNodo(c0, c1, c2, c3);
}
}else{
r = new QuadNodo(c);
r.setChildren(DI(recortar(img,0),r), DI(recortar(img,1),r), DI(recortar(img, 2),r), DI(recortar(img, 3),r));
}
QuadTree t = new QuadTree(r);
return t;
}
public static QuadNodo DI(BufferedImage img, QuadNodo p) throws Exception {
Integer c = -1;
if(img.getHeight() == 2 && img.getWidth()==2){
//Se crean 4 hojas con su respectivo color
QuadNodo c0 = new QuadNodo(validarColor(img,0,0));
QuadNodo c1 = new QuadNodo(validarColor(img,1,0));
QuadNodo c2 = new QuadNodo(validarColor(img,1,1));
QuadNodo c3 = new QuadNodo(validarColor(img,0,1));
//Revisamos si los nodos son blancos
if(c2.getColor()==1 && c1.getColor()==1 && c0.getColor()==1 && c3.getColor()==1){
//El padre de los nodos es una hoja blanca
p.setColor(1);
return null;
}else
if(c2.getColor()==0 && c1.getColor()==0 && c0.getColor()==0 && c3.getColor()==0){
//El padre de los nodos es hoja negra
p.setColor(0);
return null;
}
else{
//Si tiene hijos variados entonces se le setean
QuadNodo a = new QuadNodo(c);
a.setChildren(c0,c1,c2,c3);
return a;
}
}else{
QuadNodo aux = new QuadNodo(c);
aux.setChildren(DI(recortar(img,0),aux), DI(recortar(img,1),aux), DI(recortar(img, 2),aux), DI(recortar(img, 3),aux));
return aux;
}
}