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