⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 anwtfilterspec.java

📁 jpeg2000编解码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*  * CVS identifier: *  * $Id: AnWTFilterSpec.java,v 1.1.1.1 2002/07/22 09:26:54 grosbois Exp $ *  * Class:                   AnWTFilterSpec *  * Description:             Analysis filters specification *  *  *  * COPYRIGHT: *  * This software module was originally developed by Rapha雔 Grosbois and * Diego Santa Cruz (Swiss Federal Institute of Technology-EPFL); Joel * Askel鰂 (Ericsson Radio Systems AB); and Bertrand Berthelot, David * Bouchard, F閘ix Henry, Gerard Mozelle and Patrice Onno (Canon Research * Centre France S.A) in the course of development of the JPEG2000 * standard as specified by ISO/IEC 15444 (JPEG 2000 Standard). This * software module is an implementation of a part of the JPEG 2000 * Standard. Swiss Federal Institute of Technology-EPFL, Ericsson Radio * Systems AB and Canon Research Centre France S.A (collectively JJ2000 * Partners) agree not to assert against ISO/IEC and users of the JPEG * 2000 Standard (Users) any of their rights under the copyright, not * including other intellectual property rights, for this software module * with respect to the usage by ISO/IEC and Users of this software module * or modifications thereof for use in hardware or software products * claiming conformance to the JPEG 2000 Standard. Those intending to use * this software module in hardware or software products are advised that * their use may infringe existing patents. The original developers of * this software module, JJ2000 Partners and ISO/IEC assume no liability * for use of this software module or modifications thereof. No license * or right to this software module is granted for non JPEG 2000 Standard * conforming products. JJ2000 Partners have full right to use this * software module for his/her own purpose, assign or donate this * software module to any third party and to inhibit third parties from * using this software module for non JPEG 2000 Standard conforming * products. This copyright notice must be included in all copies or * derivative works of this software module. *  * Copyright (c) 1999/2000 JJ2000 Partners. * */package jj2000.j2k.wavelet.analysis;import jj2000.j2k.quantization.*;import jj2000.j2k.util.*;import jj2000.j2k.*;import java.util.*;/** * This class extends ModuleSpec class for analysis filters specification * holding purpose. * * @see ModuleSpec * */public class AnWTFilterSpec extends ModuleSpec {    /** The reversible default filter */    private final static String REV_FILTER_STR = "w5x3";    /** The non-reversible default filter */    private final static String NON_REV_FILTER_STR = "w9x7";    /**     * Constructs a new 'AnWTFilterSpec' for the specified number of     * components and tiles.     *     * @param nt The number of tiles     *     * @param nc The number of components     *     * @param type the type of the specification module i.e. tile specific,     * component specific or both.     *     * @param qts Quantization specifications     *     * @param pl The ParameterList     * */    public AnWTFilterSpec(int nt, int nc, byte type,                           QuantTypeSpec qts,ParameterList pl) {        super(nt,nc,type);        // Check parameters        pl.checkList(AnWTFilter.OPT_PREFIX,		     pl.toNameArray(AnWTFilter.getParameterInfo()));		String param = pl.getParameter("Ffilters");        boolean isFilterSpecified = true;	// No parameter specified	if(param==null) {            isFilterSpecified = false;            // If lossless compression, uses the reversible filters in each            // tile-components             if(pl.getBooleanParameter("lossless")) {                setDefault(parseFilters(REV_FILTER_STR));                return;            }	    // If no filter is specified through the command-line, use	    // REV_FILTER_STR or NON_REV_FILTER_STR according to the	    // quantization type	    for(int t=nt-1;t>=0;t--) {		for(int c=nc-1;c>=0;c--) {		    switch(qts.getSpecValType(t,c)) {		    case SPEC_DEF:			if(getDefault()==null) {                            if( pl.getBooleanParameter("lossless") )                                setDefault(parseFilters(REV_FILTER_STR));			    if( ((String)qts.getDefault()).                                equals("reversible") ) {				setDefault(parseFilters(REV_FILTER_STR));			    } else {				setDefault(parseFilters(NON_REV_FILTER_STR));			    }			}			specValType[t][c] = SPEC_DEF;			break;		    case SPEC_COMP_DEF:			if(!isCompSpecified(c)){			    if( ((String)qts.getCompDef(c)).                                equals("reversible") ) {				setCompDef(c,parseFilters(REV_FILTER_STR));			    } else{				setCompDef(c,parseFilters(NON_REV_FILTER_STR));			    }			}			specValType[t][c] = SPEC_COMP_DEF;			break;		    case SPEC_TILE_DEF:			if(!isTileSpecified(t)){			    if( ((String)qts.getTileDef(t)).                                equals("reversible") ) {				setTileDef(t,parseFilters(REV_FILTER_STR));			    } else {				setTileDef(t,parseFilters(NON_REV_FILTER_STR));			    }			}			specValType[t][c] = SPEC_TILE_DEF;			break;		    case SPEC_TILE_COMP:			if(!isTileCompSpecified(t,c)) {			    if(((String)qts.getTileCompVal(t,c)).                               equals("reversible")) {				setTileCompVal(t,c,                                               parseFilters(REV_FILTER_STR));			    } else {				setTileCompVal(t,c,                                               parseFilters(NON_REV_FILTER_STR)                                               );			    }			}			specValType[t][c] = SPEC_TILE_COMP;			break;		    default:			throw new IllegalArgumentException("Unsupported "+							   "specification "+                                                           "type");		    }		}	    }            return;	}	// Parse argument	StringTokenizer stk = new StringTokenizer(param);	String word; // current word	byte curSpecType = SPEC_DEF; // Specification type of the	// current parameter	boolean[] tileSpec = null; // Tiles concerned by the specification	boolean[] compSpec = null; // Components concerned by the specification	AnWTFilter[][] filter;		while(stk.hasMoreTokens()){	    word = stk.nextToken();	  	    switch(word.charAt(0)){	    case 't': // Tiles specification	    case 'T': // Tiles specification 		tileSpec = parseIdx(word,nTiles);		if(curSpecType==SPEC_COMP_DEF)		    curSpecType = SPEC_TILE_COMP;		else		    curSpecType = SPEC_TILE_DEF; 		break;	    case 'c': // Components specification	    case 'C': // Components specification		compSpec = parseIdx(word,nComp);		if(curSpecType==SPEC_TILE_DEF)		    curSpecType = SPEC_TILE_COMP;		else		    curSpecType = SPEC_COMP_DEF;		break;	    case 'w': // WT filters specification	    case 'W': // WT filters specification                if(pl.getBooleanParameter("lossless") &&                    word.equalsIgnoreCase("w9x7") )  {                    throw new IllegalArgumentException("Cannot use non "+                                                       "reversible "+                                                       "wavelet transform with"+                                                       " '-lossless' option");                }		filter = parseFilters(word);		if(curSpecType==SPEC_DEF){		    setDefault(filter);		}		else if(curSpecType==SPEC_TILE_DEF){		    for(int i=tileSpec.length-1; i>=0; i--)			if(tileSpec[i]){			    setTileDef(i,filter);                        }		}		else if(curSpecType==SPEC_COMP_DEF){		    for(int i=compSpec.length-1; i>=0; i--)			if(compSpec[i]){			    setCompDef(i,filter);                        }		}		else{		    for(int i=tileSpec.length-1; i>=0; i--){			for(int j=compSpec.length-1; j>=0 ; j--){			    if(tileSpec[i] && compSpec[j]){				setTileCompVal(i,j,filter);                            }			}		    }		}		// Re-initialize		curSpecType = SPEC_DEF;		tileSpec = null;		compSpec = null;		break;	    default:		throw new IllegalArgumentException("Bad construction for "+						   "parameter: "+word); 	    }	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -