1 /*
2  * $RCSfile: MlibMedianFilterRIF.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:00 $
10  * $State: Exp $
11  */
12 package com.lightcrafts.media.jai.mlib;
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.operator.MedianFilterShape;
20 import com.lightcrafts.media.jai.opimage.RIFUtil;
21 
22 /**
23  *  Creates a MlibMedianFilterOpImage subclass for the given input
24  *  mask type
25  *  @see MlibMedianFilterOpImage
26  */
27 public class MlibMedianFilterRIF implements RenderedImageFactory {
28 
29     /** Constructor. */
MlibMedianFilterRIF()30     public MlibMedianFilterRIF() {}
31 
32     /**
33      * Create a new instance of MlibMedianFilterOpImage in the rendered layer.
34      * This method satisfies the implementation of RIF.
35      *
36      * @param paramBlock  The source image and the convolution kernel.
37      */
create(ParameterBlock paramBlock, RenderingHints renderHints)38     public RenderedImage create(ParameterBlock paramBlock,
39                                 RenderingHints renderHints) {
40         // Get ImageLayout from renderHints if any.
41         ImageLayout layout = RIFUtil.getImageLayoutHint(renderHints);
42 
43 
44         if (!MediaLibAccessor.isMediaLibCompatible(paramBlock, layout) ||
45             !MediaLibAccessor.hasSameNumBands(paramBlock, layout)) {
46             return null;
47         }
48 
49         // Get BorderExtender from renderHints if any.
50         BorderExtender extender = RIFUtil.getBorderExtenderHint(renderHints);
51 
52         MedianFilterShape maskType =
53             (MedianFilterShape)paramBlock.getObjectParameter(0);
54         int maskSize = paramBlock.getIntParameter(1);
55         RenderedImage ri = paramBlock.getRenderedSource(0);
56 
57         return new MlibMedianFilterOpImage(ri,
58                                            extender,
59                                            renderHints,
60                                            layout,
61                                            maskType,
62                                            maskSize);
63     }
64 }
65