I assume that you are trying to scale a larger image to thumbnail size or to some extent from the original to the scaled image?
In this case, this question was actually addressed by Chris Campbell from Java2D back in 2007 (I did not expect you to know this, just indicating that this is a general question), because the new approaches to scaling Java2D (RenderingHints.VALUE_INTERPOLATION_ *) did not provide equivalent to the previously rejected Image.getScaledInstance (SCALE_AREA_AVERAGING or SCALE_SMOOTH) .
As it turned out, the SCALE_AREA_AVERAGING or SCALE_SMOOTH approaches in the old Java 1.1 approach Image.getScaledInstance were a rather expensive multi-step operation that did a lot of work in the background to create this beautiful image.
Chris noted that the new and βrightβ way to use Java2D to get the same result is a gradual process of scaling the image half and over and over again until the desired image size is reached, preferably such as RenderHints.VALUE_INTERPOLATION_BICUBIC or BILINEAR.
The result is almost identical to the original Image.getScaledInstance approach that people need.
I really went hunting for this answer a few months ago while writing an image placement service and was surprised how complex the simple question was: "How to make a beautiful miniature in Java?" became.
Ultimately, I create a small Java library (Apache 2, open sourced) that implements 3 different approaches to image scaling in Java, using "best practices", including the incremental approach proposed by Chris.
The library is called imgscalr . You can download and use it as simple as:
BufferedImage thumbnail = Scalr.resize(srcImage, 150);
There are more options for installation and use (for example, quality or zoom speed), but out of the box there are smart defaults for everything to make a beautiful, scaled image for you, so you don't need to worry about more if you don't want to. The library also makes great efforts to get rid of any distribution of objects that are not absolutely necessary, and immediately get rid of BufferedImage instances if they are not needed - this is code as part of a long-term server application, so this was critical.
I have already made several releases of the library, and if you prefer to just tear out the "good stuff" and do something with it yourself, go for it. It's all on GitHub , and none of this is a secret, just an attempt to make life easier for people.
Hope this helps.