private void scanColorUnit(JPEGBitInputStream bis, Set<Integer> color_ids, Map<Integer, Integer> dc_base) throws MarkAppearException, IOException {

            // 对颜色空间进行扫描
            for (int color_id : color_ids) {
                JPEGImage.JPEGLayer layer = mImg.getLayer(color_id);
                // 对每一种颜色的采样值进行扫描
                for (int i = 0; i != layer.mHSamp*layer.mVSamp; ++i){
                    if (verbose > 1) {
                        System.out.print(mImg.getColors()[color_id - 1] + ":");
                    }
                    // 更新DC基值
                    int[] unit = new int[64];
                    Integer dc_val = dc_base.get(color_id);
                    try {
                        if (dc_val == null){dc_val = 0;}
                        dc_val = scanColor(bis, layer, dc_val, unit);
                        // 更新base值
                        dc_base.put(color_id, dc_val);
                        // 插入数据
                        mImg.addDataUnit(color_id, unit);
                    } catch (MarkAppearException e){
                        // EOI标志
                        if (e.mark == 0xd9){
                            throw e;
                        }
                        // RSTn标志,重置base值 FIXME : 这样处理对吗? 还是对所有color_id的base值都置0？
                        System.err.println("Mark : RSTn "+e.mark+" color:"+color_id);
                        dc_base.put(color_id, 0);
                    }
                }
            }
        }