Grazie,
adesso non mi fa vedere più gli spazi neri ma ho ancora il problema con gli angoli dell'immagine. Forse è una cosa normale e sono io che non capisco:

La mia funzione adesso è:
codice:
    public BufferedImage myRotate(Image i, double degree) {
        int w = i.getWidth(null);
        int h = i.getHeight(null);
        double angle = Math.toRadians(degree);
        double sin = Math.abs(Math.sin(angle));
        double cos = Math.abs(Math.cos(angle));
        int neww = (int) Math.floor(w * cos + h * sin);
        int newh = (int) Math.floor(h * cos + w * sin);
        AffineTransform at = new AffineTransform();

        at.scale((w + 0.0) / (neww + 0.0), (h + 0.0) / (newh + 0.0));
        at.translate((neww - w) / 2, (newh - h) / 2);
        at.rotate(angle, w/ 2, h/ 2);

        BufferedImage b = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = b.createGraphics();
        g.drawImage(i, at, null);
        g.dispose();
        return b;
Facendo così però l'immagine è ancora un parallelogramma. Se rimuovo l'operazione di scale o translate ottengo angoli a 90° ma l'immagine non è centrata.

Ecco due esempi: (lo sfondo nero è l'immagine originale,ce l'ho messo apposta )

Immagine con angoli dritti:


Immagine a parallelogramma:


Qualcuno ha qualche idea?

Grazie