swt中Image如何缩放?如何调整亮度?

解决方案 »

  1.   

    import java.awt.*;
    import java.awt.image.*;public class ImageProcess {
    public static void main(String[] args) {
    //原图
    Image imSrc=Toolkit.getDefaultToolkit().getImage("F:/Downloads/阿猫阿狗2简体中文版安装包/新手说明书/1.jpg");

    FilteredImageSource fisScale=new FilteredImageSource(imSrc.getSource(),new AreaAveragingScaleFilter(800,600));
    //缩放后的图
    Image imScale=Toolkit.getDefaultToolkit().createImage(fisScale);

    FilteredImageSource fisPower=new FilteredImageSource(imScale.getSource(),new PowerImage(1.0f,2.0f,2.0f,2.0f));
    //加亮后的图
    Image imPower=Toolkit.getDefaultToolkit().createImage(fisPower);

    Frame jf=new Frame();
    jf.setLayout(new FlowLayout());
    jf.add(new ImageLabel(imSrc));
    jf.add(new ImageLabel(imScale));
    jf.add(new ImageLabel(imPower));

    jf.pack();
    jf.setVisible(true);
    }
    }class ImageLabel extends Label{
    protected Image image=null;
    public ImageLabel(Image im){
    image=im;
    MediaTracker mt=new MediaTracker(this);
    mt.addImage(image,0);
    try{
    mt.waitForID(0);
    }catch(InterruptedException ie){ }
    setPreferredSize(new Dimension(image.getWidth(this),image.getHeight(this)));
    }
    public void paint(Graphics g){
    g.drawImage(image,0,0,Color.white,this);
    }
    }class PowerImage extends RGBImageFilter{
    private float ap=1;
    private float rp=1;
    private float gp=1;
    private float bp=1;
    public PowerImage(float aPower,float rPower,float gPower,float bPower){
    ap=aPower;
    rp=rPower;
    gp=gPower;
    bp=bPower;
    }
    public int filterRGB(int x, int y, int rgb) {
    DirectColorModel dcm=(DirectColorModel)ColorModel.getRGBdefault();
    int alpha =(int)( dcm.getAlpha(rgb)*ap);
    int red = (int)(dcm.getRed (rgb)*rp);
    int green = (int)(dcm.getGreen(rgb)*gp);
    int blue = (int)(dcm.getBlue (rgb)*bp);

    if(alpha>255)alpha=255;
    if(red>255)red=255;
    if(green>255)green=255;
    if(blue>255)blue=255;

    return alpha << 24 | red << 16 | green << 8 | blue;
    }
    }
      

  2.   

    to xtchina:
    当我运行你的程序时有一个问题:
    "ImageProcess.java": cannot resolve symbol: method setPreferredSize (java.awt.Dimension)in class ImageLabel at line 37, column 17
      

  3.   

    在Image类中有个方法: getScaledInstance()可以实现图像放缩功能。
      

  4.   

    谢谢大家,我是想要SWT的Image
      

  5.   

    eclipse的官网上有几篇文章是介绍这个的
    楼主不妨去看看
    我当时作的一个项目就是从哪里边找到了一些方法的!
      

  6.   

    glorywine(已非當年)还能给个地址么?我去找了,找到了一个image analyzer,但是好像没有调整亮度,对比度的