BufferedImage img = ...//Your ImageFileOutputStream fos = new FileOutputStream("test.jpg");
com.sun.image.codec.jpeg.JPEGImageEncoder encoder = com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(fos);
encoder.encode(img);
fos.close();

解决方案 »

  1.   

    不过你使用的是BufferedImage类,而我使用的是Imge类,好像BufferedImage类是继承了Image类的,那么如何把一个Imge类的对象转化为一个BufferedImage类的对象?
      

  2.   

    好像不能把Image类的对象直接转化为BufferedImage类的对象,因为Image类是BufferdImage类的父类。
    Image im;
    BufferedImage bi;
    im = bi; (可行)
    bi = im; (编译可以通过,但是我觉得会出问题)
    不知道这个BufferImage的对象如何创建?
      

  3.   

    Image是抽象类,在sun的JDK中已知的实现类只有BufferedImage,你的Image对象就该也是BufferedImage的实例,用类型转换试试看.
    Image yourImg = ...
    BufferedImage img = (BufferedImage) yourImg;
      

  4.   

    如果不行,
    Image yourImg = ...
    BufferedImage img = new BufferedImage(yourImg.getWidth(), yourImg.getHeight(), BufferedImage.TYPE_INT_RGB);
    img.getGraphics().drawImage(yourImg, 0, 0, null);
    ...
      

  5.   

    看来我没有把问题说清楚。
    我要做的程序是这样,我有一幅demo.jpg的文件,然后我读入这幅图片,使用了自己的加密算法,比如是这样:myEncode("demo.jpg"),然后把加密的文件存为demo.ecd。我现在要写一个解密程序,首先读入这个文件,大概是这样:byte[] readFile("demo.ecd"),就是读入demo.ecd文件。然后得到一个字节数组byteBuffer,接着我对这个数组进行解密,使用方法就是:byte[] mydecode(byteBuffer);得到了字节数组imageBuffer, 接着我使用以下方法从这个imageBuffer字节数组得到了一个Image类的对象:Image image = Toolkit.getDefaultToolkit().createImage(byteBuffer);(你可以看看JDK对这个方法的介绍)。这样我就得到了一个Image类的对象image。现在我的问题就是要把这个Image类的对象image 写为一个jpe文件demo.jpg,既是还原了。
    不知道你看明白没有?
    还有,Image类如果是抽象类的话,它怎么可能创造实例呢?
      

  6.   

    用cbhyk的方法肯定是可以的,不论image还是bufferedimage,我前段时间就这样写过一个画图程序,抽象类不能new得一个"抽象"实例,但可以定义变量,用它引用实现了其抽象方法的子类对象,你试试看用toolkit(它也是抽象类)的create方法得到的image是否是bufferedimage对象(肯定是image某一子类对象)?好像一般image都可以直接cast的的
      

  7.   

    public static void main(String[] args)
    {
    try
    {
    FileInputStream fis = new FileInputStream("test.jpg");
    byte[] buffer = new byte[fis.available()];
    fis.read(buffer);
    fis.close(); Image yourImg = Toolkit.getDefaultToolkit().createImage(buffer);
    MediaTracker tracker = new MediaTracker(new JLabel());
    tracker.addImage(yourImg, 1);
    tracker.waitForID(1); BufferedImage img = new BufferedImage(yourImg.getWidth(null), yourImg.getHeight(null), BufferedImage.TYPE_INT_RGB);
    img.getGraphics().drawImage(yourImg, 0, 0, null);

    FileOutputStream fos = new FileOutputStream("test1.jpg");
    com.sun.image.codec.jpeg.JPEGImageEncoder encoder = com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(fos);
    encoder.encode(img);
    fos.close();
    System.exit(0);
    }
    catch(Exception e)
    {
    e.printStackTrace();
    System.exit(1);
    }
    }
      

  8.   

    不错,我的程序完成了。
    谢谢 cbhyk 的帮助!