Ciao grazie sembra perfetta ehehehe:P...solo che un piccolo problema..la mia funzione merge
ridisegna solo una parte dell'immagine e non capisco perchè:P!!!!!!

Io gli passo un vettore di BufferedImage che contiene 4 elementi...ottenuti tramite la split
come richiamo la merge mi ridisegna solo 1/4 (sono un po alle prime armi.....)

Cmq la merge è questa non quella che ho postato sopra:
public static BufferedImage mergeImage(BufferedImage[] imgFrame, int rows, int cols)
{

BufferedImage Im = new BufferedImage(imgFrame[0].getWidth() * rows, imgFrame[0].getHeight() *cols, imgFrame[0].getType()); // so che l'array è di un solo tipo
int i=0; // devo operare su n elementi di BufferedImage[]..
Graphics2D g = Im.createGraphics();

for( int Irows=0; Irows< rows; Irows++)
{
for(int Icols=0; Icols< cols; Icols++)
{
// chiedo a Graphics di disegnare su Im width x height

// disegno l'immaggine come un collage.....null ultimo parametro non ho bisogno di listener..
g.drawImage(imgFrame[i], 0, 0, imgFrame[i].getWidth(), imgFrame[i].getHeight(), imgFrame[i].getWidth()*Irows, imgFrame[i].getHeight()*Icols, imgFrame[i].getWidth()*Irows+imgFrame[i].getWidth(), imgFrame[i].getHeight()*Icols+imgFrame[i].getHeight(), null);


//incremento il valore ogni volta che disegno un frammento
i++;

}
}
g.dispose();

return Im;
}

Sai dove sbaglio?