Demo
This renderable scale demo shows the use of multi-resolution
images and renerable ops. Use the slider to scale the image
over a 30 to 1 range.
JAI
The "Scale" operation translates and resizes an image. For each
pixel (x, y) of the destination, the source value at the fractional
subpixel position ((x - xTrans)/xScale, (y - yTrans)/yScale) is
constructed by means of an Interpolation object and written to the
destination.
When applying scale factors of scale_x, scale_y to a source image with width of src_width and height of src_height, the resulting image is defined to have the following dimensions:
dst_width = src_width * scale_x
dst_height = src_height * scale_y
When interpolations which require padding the source such as Bilinear
or Bicubic interpolation are specified, the source needs to be extended
such that it has the extra pixels needed to compute all the destination
pixels. This extension is performed via the BorderExtender
class. The type of Border Extension can be specified as a
RenderingHint
to the JAI.create
method.
If no Border Extension is specified, the source will not be extended. The scaled image size is still calculated according to the formula specified above. However since there isn't enough source to compute all the destination pixels, only that subset of the destination image's pixels, which can be computed, will be written in the destination. The rest of the destination will not be written.
Specifying a scale factor of greater than 1 increases the size of the image, specifying a scale factor between 0 and 1 (non-inclusive) decreases the size of an image. An IllegalArgumentException will be thrown if the specified scale factors are negative or equal to zero.
"Scale" defines a PropertyGenerator that performs an identical
transformation on the "ROI" property of the source image, which can
be retrieved by calling the getProperty
method with
"ROI" as the property name.
Theory
The renderable scale operation looks at multi-resolution images
to find the image with the next largest scale factor. This image
is used to scale to the desired output size.