precinctsizespec.java

来自「jpeg2000编解码」· Java 代码 · 共 412 行 · 第 1/2 页

JAVA
412
字号
                        w = new Integer(word);                                                // Get next word in argument list                        try {                            word = stk.nextToken();                        } catch (NoSuchElementException e) {                             errMsg = "'"+optName+"' option : could not "+                                "parse the precinct's width";                            throw new IllegalArgumentException(errMsg);                                                    }                        // Get precinct height                        h = new Integer(word);                        if (w.intValue() != (1<<MathUtil.log2(w.intValue()))                            || h.intValue() !=                            (1<<MathUtil.log2(h.intValue())) ) {                            errMsg = "Precinct dimensions must be powers of 2";                            throw new IllegalArgumentException(errMsg);                        }                    } catch( NumberFormatException e) {                        errMsg = "'"+optName+"' option : the argument '"+word+                            "' could not be parsed.";                        throw new IllegalArgumentException(errMsg);                    }                    // Store packet's dimensions in Vector arrays                    v[0].addElement(w);                    v[1].addElement(h);                                        // Try to get the next token                    if ( stk.hasMoreTokens() ) {                        word = stk.nextToken();                        if ( !Character.isDigit(word.charAt(0)) ) {                            // The next token does not start with a digit so                            // it is not a precinct's size argument. We set                            // the wasReadingPrecinctSize booleen such that we                            // know that we don't have to read another token                            // and check for the end of the parameters list.                            wasReadingPrecinctSize = true;                            if(curSpecType==SPEC_DEF){                                setDefault(v);                            } else if(curSpecType==SPEC_TILE_DEF){                                for(ti=tileSpec.length-1; ti>=0; ti--) {                                    if( tileSpec[ti] ){                                        setTileDef(ti,v);                                    }                                }                            } else if(curSpecType==SPEC_COMP_DEF){                                for(ci=compSpec.length-1; ci>=0; ci--) {                                    if( compSpec[ci] ){                                        setCompDef(ci,v);                                    }                                }                            } else {                                for(ti=tileSpec.length-1; ti>=0; ti--){                                    for(ci=compSpec.length-1; ci>=0 ; ci--){                                        if(tileSpec[ti] && compSpec[ci]){                                            setTileCompVal(ti,ci,v);                                        }                                    }                                }                            }                            // Re-initialize                            curSpecType = SPEC_DEF;                            tileSpec = null;                            compSpec = null;                                                        // Go back to 'normal' parsing                            break;                        } else {                            // Next token starts with a digit so read it                        }                    } else {                        // We have reached the end of the parameters list so                        // we store the last precinct's sizes and we stop                        if(curSpecType==SPEC_DEF){                            setDefault(v);                        } else if(curSpecType==SPEC_TILE_DEF){                            for(ti=tileSpec.length-1; ti>=0; ti--) {                                if( tileSpec[ti] ){                                    setTileDef(ti,v);                                }                            }                        } else if(curSpecType==SPEC_COMP_DEF){                            for(ci=compSpec.length-1; ci>=0; ci--) {                                if( compSpec[ci] ){                                    setCompDef(ci,v);                                }                            }                        } else {                            for(ti=tileSpec.length-1; ti>=0; ti--){                                for(ci=compSpec.length-1; ci>=0 ; ci--){                                    if( tileSpec[ti] && compSpec[ci] ){                                        setTileCompVal(ti,ci,v);                                    }                                }                            }                        }                        endOfParamList = true;                        break;                    }                } // while (true)                break;            } // switch        } // while    }        /**     * Returns the precinct partition width in component 'n' and tile 't' at     * resolution level 'rl'. If the tile index is equal to -1 or if the     * component index is equal to -1 it means that those should not be taken     * into account.     *     * @param t The tile index, in raster scan order. Specify -1 if it is not     * a specific tile.     *     * @param c The component index. Specify -1 if it is not a specific     * component.     *      * @param rl The resolution level     *     * @return The precinct partition width in component 'c' and tile 't' at     * resolution level 'rl'.     * */    public int getPPX(int t,int c,int rl) {        int mrl, idx;        Vector[] v=null;        boolean tileSpecified = (t!=-1 ? true : false);        boolean compSpecified = (c!=-1 ? true : false);                // Get the maximum number of decomposition levels and the object        // (Vector array) containing the precinct dimensions (width and        // height) for the specified (or not) tile/component        if (tileSpecified && compSpecified) {            mrl = ((Integer)dls.getTileCompVal(t, c)).intValue();            v = (Vector[])getTileCompVal(t, c);        } else if (tileSpecified && !compSpecified) {            mrl = ((Integer)dls.getTileDef(t)).intValue();            v = (Vector[])getTileDef(t);        } else if (!tileSpecified && compSpecified) {            mrl = ((Integer)dls.getCompDef(c)).intValue();            v = (Vector[])getCompDef(c);        } else {            mrl = ((Integer)dls.getDefault()).intValue();            v = (Vector[])getDefault();        }        idx = mrl - rl;        if (v[0].size()>idx) {             return ((Integer)v[0].elementAt(idx)).intValue();        } else {            return ((Integer)v[0].elementAt(v[0].size()-1)).intValue();        }    }        /**     * Returns the precinct partition height in component 'n' and tile 't' at     * resolution level 'rl'. If the tile index is equal to -1 or if the     * component index is equal to -1 it means that those should not be taken     * into account.     *     * @param t The tile index, in raster scan order. Specify -1 if it is not     * a specific tile.     *     * @param c The component index. Specify -1 if it is not a specific     * component.     *      * @param rl The resolution level.     *     * @return The precinct partition width in component 'n' and tile 't' at     * resolution level 'rl'.     * */    public int getPPY(int t, int c, int rl) {        int mrl, idx;        Vector[] v=null;        boolean tileSpecified = (t!=-1 ? true : false);        boolean compSpecified = (c!=-1 ? true : false);                // Get the maximum number of decomposition levels and the object        // (Vector array) containing the precinct dimensions (width and        // height) for the specified (or not) tile/component        if ( tileSpecified && compSpecified ) {            mrl = ((Integer)dls.getTileCompVal(t, c)).intValue();            v = (Vector[])getTileCompVal(t, c);        }        else if ( tileSpecified && !compSpecified ) {            mrl = ((Integer)dls.getTileDef(t)).intValue();            v = (Vector[])getTileDef(t);        }        else if ( !tileSpecified && compSpecified ) {            mrl = ((Integer)dls.getCompDef(c)).intValue();            v = (Vector[])getCompDef(c);        }        else {            mrl = ((Integer)dls.getDefault()).intValue();            v = (Vector[])getDefault();        }        idx = mrl - rl;        if ( v[1].size() > idx ) {            return ((Integer)v[1].elementAt(idx)).intValue();        }        else {            return ((Integer)v[1].elementAt(v[1].size()-1)).intValue();        }    }}

⌨️ 快捷键说明

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