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