Può darsi che ci siano diversi modi, quello che mi viene in mente (e che userei io senza andarmi a spulciare tutta la documentazione per vedere se ci sono altri modi) è:
- crei un nuovo BufferedImage della larghezza/altezza dell'ovale. Il BufferedImage puoi crearlo con o senza "alpha channel" (vedi Javadoc, in particolare il imageType per creare l'immagine).
- prendi il Graphics2D ( createGraphics() ) del BufferedImage e puoi riempire tutto il rettangolo con un colore fisso con/senza semi-trasparenza.
- crei un Ellipse2D.Float che modella l'ovale. L'origine deve essere 0,0 (perché è l'origine nella immagine da salvare).
- sul Graphics2D imposti l'area di "clip" ( clip(Shape s) ). Nota, Ellipse2D.Float è quello shape!
- disegni sul Graphics2D la tua immagine originale, in pratica da [x , y; w x h] di src a [0 , 0; w x h] nel BufferedImage. Il drawImage da usare è uno di quelli che hanno src e dst completi.
- fai dispose del Graphics2D e hai l'immagine da salvare.