可以解释一下: 图形文件的缩放 是什么意思?
还有 java 不是和平台无关吗?为甚么 要说 在Solaris 2.8下使用的??

解决方案 »

  1.   

    是这样的,假设我有一个800*600的图象文件,而我现在要把它们缩小到200*100尺寸, 就是这样.
    至于为什么说根在Solaris 2.8下使用是因为有的JAVA工具是使用了本地库技术的,如果只有WINDOWS版本的本地库而没有Solaris下的本地库,它照样不能用.
      

  2.   

    使用Image类. 
    Image getScaledInstance(int width, int height, int hints)
              建立一个缩放过的图像.
      

  3.   

    建立了Image对象后如何再将它按指定格式写入文件呢?
      

  4.   

    对于jdk1。3http://java.sun.com/products/java-media/jai/forDevelopers/jai1_0_1guide-unc/Encode.doc.html对于jdk1。4http://java.sun.com/j2se/1.4/docs/guide/imageio/spec/apps.fm4.html我还没试出来,结果出来了可否给告知一下!
    (注意写了文件要flush并close)
      

  5.   

    非常感谢几位对我的帮助,此问题已经解决,现将解决方案列出,希望对各位有用:
    ================================================import javax.imageio.*;
    import javax.imageio.stream.*;
    import java.io.*;
    import java.util.*;
    import java.awt.image.*;
    import java.awt.image.renderable.*;
    import java.awt.Image;
    import javax.media.jai.*;public class ImageTools {    public static final int SCALE_TYPE_NORMAL=0;
    public static final int SCALE_TYPE_WIDTH=1;
    public static final int SCALE_TYPE_HEIGHT=2;
    public static final int SCALE_TYPE_AUTO=3; public ImageTools() {
        }
    /*
    public static boolean resize(int width, int height, String srcFile, String desFile) throws IOException{
    File src=new File(srcFile);
    ImageInputStream iis = ImageIO.createImageInputStream(src);
    ImageReader ir = (ImageReader)ImageIO.getImageReaders(iis).next();
    String fileFormat = ir.getFormatName();
    BufferedImage sImage=ImageIO.read(src);
    iis.close();
    File des=new File(desFile);
    //Image sImage = java.awt.Toolkit.getDefaultToolkit().getImage(srcFile);
    Image sImage = ImageIO.read(src);
    Image dImg=sImage.getScaledInstance(width,height,sImage.SCALE_DEFAULT);
    BufferedImage dImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
    dImage.getGraphics().drawImage(dImg,0,0,null);
    return ImageIO.write(dImage,"jpg",des);
    }
    */
    private static RenderedOp getImage(String srcFile){
        return JAI.create("fileload",srcFile);
    }
    public static boolean resize(float xscale, float yscale, float xtrans, float ytrans, Interpolation interp,String srcFile, String desFile){
    RenderedOp ro = getImage(srcFile);
    ParameterBlock pb = new ParameterBlock();
            pb.addSource(ro);
        pb.add(xscale);
            pb.add(yscale);
            pb.add(xtrans);
            pb.add(ytrans);
    if (interp == null) {
                interp = Interpolation.getInstance(Interpolation.INTERP_NEAREST);
            }
            pb.add(interp);
            ro=JAI.create("scale", pb);
    JAI.create("filestore",ro,desFile,"jpeg",null);
    return true;
    }
    //*/
    public static boolean resize(int width, int height, String srcFile, String desFile, int type){
        RenderedOp ro = getImage(srcFile);
    float xscale=1.0f;
    float yscale=1.0f;
    switch(type){
            case 0:
    xscale = (float)width/(float)ro.getWidth();
    yscale = (float)height/(float)ro.getHeight();
    break;
    case 1:
    xscale = (float)width/(float)ro.getWidth();
    yscale=xscale;
    break;
    case 2:
    yscale = (float)height/(float)ro.getHeight();
    xscale = yscale;
    break;
    case 3:
    if(ro.getHeight()>ro.getWidth()){
        yscale = (float)height/(float)ro.getHeight();
    xscale = yscale;
    }
    else{
    xscale = (float)width/(float)ro.getWidth();
    yscale = xscale;
    }
    break;
    }
    return resize(xscale,yscale,0.0F,0.0F,null,srcFile,desFile);
    }    public static void main(String[] args) throws IOException{
            int width = Integer.parseInt(args[0]);
    int height = Integer.parseInt(args[1]);
    long sTime = System.currentTimeMillis();
    ImageTools.resize(width,height,args[2],args[3],ImageTools.SCALE_TYPE_AUTO);
    long dTime = System.currentTimeMillis();
    System.out.println("use time: "+(dTime-sTime));
        }
    }========================================
    此例中使用了两种方法,分别是使用JAI和ImageIO,但是使用ImageIO方法需要操作系统有图形支持,因为我的Solaris未安装XWindows所以不能用.而JAI则需要安装对应的包.各位可以做为参考.