1 /*
2  * $RCSfile: WarpRIF.java,v $
3  *
4  * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
5  *
6  * Use is subject to license terms.
7  *
8  * $Revision: 1.1 $
9  * $Date: 2005/02/11 04:56:47 $
10  * $State: Exp $
11  */
12 package com.lightcrafts.media.jai.opimage;
13 import java.awt.RenderingHints;
14 import java.awt.image.RenderedImage;
15 import java.awt.image.renderable.ParameterBlock;
16 import java.awt.image.renderable.RenderedImageFactory;
17 import com.lightcrafts.mediax.jai.BorderExtender;
18 import com.lightcrafts.mediax.jai.ImageLayout;
19 import com.lightcrafts.mediax.jai.Interpolation;
20 import com.lightcrafts.mediax.jai.InterpolationNearest;
21 import com.lightcrafts.mediax.jai.InterpolationBilinear;
22 import com.lightcrafts.mediax.jai.Warp;
23 
24 /**
25  * A <code>RIF</code> supporting the "Warp" operation in the rendered
26  * image layer.
27  *
28  * @since EA2
29  * @see com.lightcrafts.mediax.jai.operator.WarpDescriptor
30  * @see GeneralWarpOpImage
31  *
32  */
33 public class WarpRIF implements RenderedImageFactory {
34 
35     /** Constructor. */
WarpRIF()36     public WarpRIF() {}
37 
38     /**
39      * Creates a new instance of warp operator according to the warp object
40      * and interpolation method.
41      *
42      * @param paramBlock  The warp and interpolation objects.
43      */
create(ParameterBlock paramBlock, RenderingHints renderHints)44     public RenderedImage create(ParameterBlock paramBlock,
45                                 RenderingHints renderHints) {
46         // Get ImageLayout from renderHints if any.
47         ImageLayout layout = RIFUtil.getImageLayoutHint(renderHints);
48 
49 
50         // Get BorderExtender from renderHints if any.
51         BorderExtender extender = RIFUtil.getBorderExtenderHint(renderHints);
52 
53         RenderedImage source = paramBlock.getRenderedSource(0);
54         Warp warp = (Warp)paramBlock.getObjectParameter(0);
55         Interpolation interp = (Interpolation)paramBlock.getObjectParameter(1);
56 
57         double[] backgroundValues = (double[])paramBlock.getObjectParameter(2);
58 
59         if (interp instanceof InterpolationNearest) {
60             return new WarpNearestOpImage(source,
61                                           renderHints,
62                                           layout,
63                                           warp,
64                                           interp,
65                                           backgroundValues);
66         } else if (interp instanceof InterpolationBilinear) {
67             return new WarpBilinearOpImage(source, extender, renderHints,
68                                            layout, warp, interp,
69                                            backgroundValues);
70         } else {
71             return new WarpGeneralOpImage(source, extender, renderHints,
72                                           layout, warp, interp,
73                                           backgroundValues);
74         }
75     }
76 }
77