public synchronized int recognizeColoredIcons(int r, int g, int b, String name, int x, int y, int w, int h) throws GPSException
{
loadImage(); // Para obtener una imagen "fresca"
if ( image == null )
throw new GPSException("Null image.");
try
{
//Si el �cono ya fue reconocido, se lo borra y se lo vuelve a reconocer
if ( isColoredIconJustRecognized( r , g , b ) )
removeRecongnizedColoredIcon( r , g , b );
// [EB2] Cuando la simulacion es real, no reconocemos shapes sino que
// buscamos los colores para mapearlos
RecognizedShape[] newIcons;
if(realSimulation) {
/*
double x, double y,
double bx, double by,
double area, Color color,
int[] xp, int[] yp, int np
*/
int paramW = w;
if(w<0) {
paramW = x-Math.abs(w);
}
int paramH = h;
if(h<0) {
paramH = y-Math.abs(h);
}
int[] polygonVerticesX = new int[4];
int[] polygonVerticesY = new int[4];
// Arriba, Izq
polygonVerticesX[0]=x;
polygonVerticesY[0]=y;
// Arriba, Der
polygonVerticesX[1]=x+paramW;
polygonVerticesY[1]=y;
// Abajo, Der
polygonVerticesX[2]=x+paramW;
polygonVerticesY[2]=y+paramH;
// Abajo, Izq
polygonVerticesX[3]=x;
polygonVerticesY[3]=y+paramH;
int bx = Math.min(polygonVerticesX[0],polygonVerticesX[2]), by = Math.max(polygonVerticesY[0],polygonVerticesY[2]);
float centroidX, centroidY;
centroidX = (float)(polygonVerticesX[0] + polygonVerticesX[2])/2;
centroidY = (float)(polygonVerticesY[0] + polygonVerticesY[2])/2;
int area = Math.abs(polygonVerticesX[2] - polygonVerticesX[0]) * (polygonVerticesY[2] - polygonVerticesY[0]);
newIcons = new RecognizedShape[1];
newIcons[0] = new RecognizedShape(centroidX,centroidY,bx,by,area,new Color(r,g,b),polygonVerticesX,polygonVerticesY,4);
} else {
imageUtils.recognizeShapes( r, g, b, 1000, 999999, ImageUtils.HIGH_ACCURACY );
newIcons = imageUtils.getRecognizedShapes();
}
if ( newIcons == null || newIcons.length == 0 )
throw new GPSException("Not colored icons were recognized.");
// Se agrega el nuevo �cono reconocido al final del arreglo
RecognizedShape[] tempRecognizedColoredIcons = sceneItems.recognizedColoredIcons;
sceneItems.recognizedColoredIcons = new RecognizedShape[sceneItems.recognizedColoredIcons.length + newIcons.length];
int i,j;
for (i=0; i<tempRecognizedColoredIcons.length; i++)
sceneItems.recognizedColoredIcons[i] = tempRecognizedColoredIcons[i];
for (j=0; j<newIcons.length; j++)
{
// A todos los iconos del mismo color se les pone el mismo nombre
newIcons[j].shapeId = name;
sceneItems.recognizedColoredIcons[j+i] = newIcons[j];
}
return newIcons.length;
}
catch (ImageUtilsException e)
{
throw new GPSException( e.getMessage() );
}
}