Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 1999-2101 Alibaba Group.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package com.alibaba.simpleimage.util;
 
 import java.util.Set;
 
 import  javax.media.jai.JAI;
 import  javax.media.jai.PlanarImage;
 import  javax.media.jai.operator.ColorQuantizerDescriptor;
 import  javax.media.jai.operator.ColorQuantizerType;
 
类PaletteBuilder2.java的实现描述:TODO 类实现描述

Author(s):
wendell 2011-8-5 下午02:11:53
 
 public class IndexImageBuilder {
 
     public static RenderedImage createIndexedImage(RenderedImage srcWriteParameter.QuantAlgorithm quantAlgorithm) {
         IndexImageBuilder builder = new IndexImageBuilder(srcquantAlgorithm);
 
         return builder.createIndexedImage();
     }
     
     public static boolean needConvertToIndex(RenderedImage image) {
         SampleModel sampleModel = image.getSampleModel();
         ColorModel colorModel = image.getColorModel();
 
         return sampleModel.getNumBands() != 1 || sampleModel.getSampleSize()[0] > 8
                || colorModel.getComponentSize()[0] > 8;
     }
 
     protected RenderedImage                 src;
 
     protected IndexImageBuilder(RenderedImage srcWriteParameter.QuantAlgorithm quantAlgorithm){
         this. = src;
         this. = quantAlgorithm;
     }
 
     protected RenderedImage createIndexedImage() {
             return PaletteBuilder.createIndexedImage();
         }
         
         SampleModel sm = .getSampleModel();
         if(!(sm.getNumBands() != 3  && sm.getDataType() == .)) {
             PlanarImage pi = PlanarImage.wrapRenderedImage();
             ParameterBlock pb = new ParameterBlock();
             pb.addSource(pi);
             pb.add(getQuantizationAlgorithm());
             pi = JAI.create("ColorQuantizer"pb);
             
             return pi;
         }
             
         return PaletteBuilder.createIndexedImage();
     }
 
     private ColorQuantizerType getQuantizationAlgorithm(WriteParameter.QuantAlgorithm quantAlg) {
         if (quantAlg == ..) {
             return ColorQuantizerDescriptor.OCTTREE;
         } else if (quantAlg == ..) {
             return ColorQuantizerDescriptor.NEUQUANT;
         } else if (quantAlg == ..) {
             return ColorQuantizerDescriptor.MEDIANCUT;
         } else {
             throw new IllegalArgumentException("Unknown quantization algorithm " + quantAlg);
         }
     }

    
此方法暂时不用,但是不删,做以后参考

Returns:
        ColorModel srcCM = .getColorModel();
        if(srcCM instanceof IndexColorModel) {
            return ;
        }
        
        Raster srcRaster = .getData();
        boolean hasTransparent = srcCM.getTransparency() != .;
        int maxColorCount = 256;
        if(hasTransparent) {
            maxColorCount = 255;
        }
        
        int num = 0;
        Set<IntegercolorSet = new HashSet<Integer>();
        int[] colorArrays = new int[maxColorCount];
        for(int x = 0; x < .getWidth(); x++) {
            for(int y = 0; y < .getHeight(); y++) {
                int rgb = srcCM.getRGB(srcRaster.getDataElements(xynull)) & 0xFFFFFF;
                if(!colorSet.contains(rgb)) {
                    if(num == maxColorCount) {
                        return null;
                    }
                    
                    colorArrays[num++] = rgb;
                    colorSet.add(rgb);
                }
            }
        }
        if(num == 0) {
            throw new IllegalStateException("This image has no color");
        }
        
        int[] colors = null;
        if(hasTransparent) {
            colors = new int[num + 1];
            System.arraycopy(colorArrays, 0, colors, 1, num);
            colors[0] = 0;
        } else {
            colors = new int[num];
            System.arraycopy(colorArrays, 0, colors, 0, num);
        }
        
        Arrays.sort(colors);
        
        byte[] red = new byte[colors.length];
        byte[] green = new byte[colors.length];
        byte[] blue = new byte[colors.length];
        for(int i = 0; i < colors.lengthi++) {
            red[i] = (byte)((colors[i] >> 16) & 0xFF);
            green[i] = (byte)((colors[i] >> 8) & 0xFF);
            blue[i] = (byte)((colors[i]) & 0xFF);
        }
        IndexColorModel destCM = null;
        if(hasTransparent) {
            destCM = new IndexColorModel(8, colors.lengthredgreenblue, 0);
        } else {
            destCM = new IndexColorModel(8, colors.lengthredgreenblue);
        }
        
        BufferedImage image = new BufferedImage(.getWidth(), .getHeight(), .destCM);
        WritableRaster raster = image.getRaster();
        for (int x = 0; x < .getWidth(); x++) {
            for (int y = 0; y < .getHeight(); y++) {
                int argb = srcCM.getRGB(srcRaster.getDataElements(xynull));
                if(hasTransparent && ((argb & 0xFF000000) != 0xFF000000)) {
                    raster.setSample(xy, 0, 0);
                } else {
                    int index = Arrays.binarySearch(colors, (argb & 0x00FFFFFF));
                    if(index < 0) {
                        throw new IllegalStateException("Some colors not indexed");
                    }
                    raster.setSample(xy, 0, index);
                }
            }
        }
        return image;
    }
New to GrepCode? Check out our FAQ X