1 /* Copyright (C) 2005-2011 Fabio Riccardi */
2 
3 /*
4  * $RCSfile: ConvolveRIF.java,v $
5  *
6  * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
7  *
8  * Use is subject to license terms.
9  *
10  * $Revision: 1.1 $
11  * $Date: 2005/02/11 04:56:20 $
12  * $State: Exp $
13  */
14 package com.lightcrafts.jai.opimage;
15 
16 import com.lightcrafts.media.jai.opimage.RIFUtil;
17 
18 import java.awt.RenderingHints;
19 import java.awt.image.DataBuffer;
20 import java.awt.image.RenderedImage;
21 import java.awt.image.renderable.ParameterBlock;
22 import java.awt.image.renderable.RenderedImageFactory;
23 import com.lightcrafts.mediax.jai.BorderExtender;
24 import com.lightcrafts.mediax.jai.ImageLayout;
25 import com.lightcrafts.mediax.jai.KernelJAI;
26 
27 /**
28  * @see ConvolveOpImage
29  */
30 public class LCSeparableConvolveRIF implements RenderedImageFactory {
31 
32     /** Constructor. */
LCSeparableConvolveRIF()33     public LCSeparableConvolveRIF() {}
34 
35     /**
36      * Create a new instance of ConvolveOpImage in the rendered layer.
37      * This method satisfies the implementation of RIF.
38      *
39      * @param paramBlock  The source image and the convolution kernel.
40      */
create(ParameterBlock paramBlock, RenderingHints renderHints)41     public RenderedImage create(ParameterBlock paramBlock,
42                                 RenderingHints renderHints) {
43         // Get ImageLayout from renderHints if any.
44         ImageLayout layout = RIFUtil.getImageLayoutHint(renderHints);
45 
46 
47         // Get BorderExtender from renderHints if any.
48         BorderExtender extender = RIFUtil.getBorderExtenderHint(renderHints);
49 
50         KernelJAI unRotatedKernel =
51             (KernelJAI)paramBlock.getObjectParameter(0);
52         KernelJAI kJAI = unRotatedKernel.getRotatedKernel();
53 
54         int dataType =
55            paramBlock.getRenderedSource(0).getSampleModel().getDataType();
56         boolean dataTypeOk = (dataType == DataBuffer.TYPE_BYTE ||
57                               dataType == DataBuffer.TYPE_SHORT ||
58                               dataType == DataBuffer.TYPE_INT);
59 
60         if (kJAI.isSeparable()) {
61            return new LCSeparableConvolveOpImage(paramBlock.getRenderedSource(0),
62                                                extender,
63                                                renderHints,
64                                                layout,
65                                                kJAI);
66 
67         } else {
68             return null;
69         }
70     }
71 }
72