In this chapter we discussed how to implement different types of image manipulation operations. Implementation of manipulation functions is much easier with the AffineTransform class, which allows the functions to be combined in any order without much coding.
The image viewer application that we built in this chapter incorporates different types of image manipulations. While running these operations, you may have noticed that performance is not at all a problem.
With the design described in this chapter, the manipulation operations are built like building blocks. Applications need to construct only the functions they require at a given time. In addition, the manipulation logic is separated from the GUI, allowing application developers to choose any GUI they like for generating image manipulation parameters. As we'll see in Part III (the JAI chapters), the manipulation classes described in this chapter are reused in other applications.