Benutz doch die Methoden von Graphics2D, die können das alles (und mehr). Es gibt direkt Methoden wie "rotate" und "scale".
Also eigentlich machst du dir ein BufferedImage, generierst das Graphics Objekt dazu, und zeichnest dein altes Bild auf das neue Bild. Ob die Qualität gut genug für dich ist, kann ich dir nicht sagen. Aber das Graphics-Objekt kann man konfigurieren so dass es hübscher zeichnet.