现在已经有了24位位图,但用户需要单色位图。小弟才疏学浅,希望各个高手大侠帮帮忙!

解决方案 »

  1.   

    http://zhidao.baidu.com/question/86621478.htmlhttp://zhidao.baidu.com/question/86621478.html灰度变换
    下面的程序使用三种方法对一个彩色图像进行灰度变换,变换的效果都不一样。一般而言,灰度变换的算法是将象素的三个颜色分量使用R*0.3+G*0.59+B*0.11得到灰度值,然后将之赋值给红绿蓝,这样颜色取得的效果就是灰度的。另一种就是取红绿蓝三色中的最大值作为灰度值。java核心包也有一种算法,但是没有看源代码,不知道具体算法是什么样的,效果和上述不同。/* GrayFilter.java*/ 
    /*@author:cherami */ 
    /*email:[email protected]*/ 
    import java.awt.image.*; 
    public class GrayFilter extends RGBImageFilter { 
    int modelStyle; 
    public GrayFilter() { 
    modelStyle=GrayModel.CS_MAX; 
    canFilterIndexColorModel=true; 

    public GrayFilter(int style) { 
    modelStyle=style; 
    canFilterIndexColorModel=true; 

    public void setColorModel(ColorModel cm) { 
    if (modelStyle==GrayModel 
    else if (modelStyle==GrayModel 

    public int filterRGB(int x,int y,int pixel) { 
    return pixel; 


    /* GrayModel.java*/ 
    /*@author:cherami */ 
    /*email:[email protected]*/ 
    import java.awt.image.*; 
    public class GrayModel extends ColorModel { 
    public static final int CS_MAX=0; 
    public static final int CS_FLOAT=1; 
    ColorModel sourceModel; 
    int modelStyle;public GrayModel(ColorModel sourceModel) { 
    super(sourceModel.getPixelSize()); 
    this.sourceModel=sourceModel; 
    modelStyle=0; 
    }public GrayModel(ColorModel sourceModel,int style) { 
    super(sourceModel.getPixelSize()); 
    this.sourceModel=sourceModel; 
    modelStyle=style; 
    }public void setGrayStyle(int style) { 
    modelStyle=style; 
    }protected int getGrayLevel(int pixel) { 
    if (modelStyle==CS_MAX) { 
    return Math.max(sourceModel.getRed(pixel),Math.max(sourceModel.getGreen(pixel),sourceModel.getBlue(pixel))); 

    else if (modelStyle==CS_FLOAT){ 
    return (int)(sourceModel.getRed(pixel)*0.3+sourceModel.getGreen(pixel)*0.59+sourceModel.getBlue(pixel)*0.11); 

    else { 
    return 0; 

    }public int getAlpha(int pixel) { 
    return sourceModel.getAlpha(pixel); 
    }public int getRed(int pixel) { 
    return getGrayLevel(pixel); 
    }public int getGreen(int pixel) { 
    return getGrayLevel(pixel); 
    }public int getBlue(int pixel) { 
    return getGrayLevel(pixel); 
    }public int getRGB(int pixel) { 
    int gray=getGrayLevel(pixel); 
    return (getAlpha(pixel)<<24)+(gray<<16)+(gray<<8)+gray; 

    }