用 java swing 开发,在图片的任一位置,g.drawOval(point[0].x, point[0].y, width, height); 画了一个椭圆,我现在要保存这个图片到本地,同时要把在这个图片上的椭圆也同时保存在图片上,请问怎么做哦?

解决方案 »

  1.   

    存储的方式有很多.比如,用串行化的方式可以存储,但只能通过特定的程序才能够再次显示出来.
    如果有存储成一个图片格式(如JPG,GIF)等,则只能存储最终结果,也就是说,不能复原原来的图片及椭圆.
      

  2.   

    画矩形,保存到本地的代码: BufferedImage bufferImage = new BufferedImage(1024, 768, 1);
    Rectangle2D rect = new Rectangle2D.Double(20, 50, 40, 80);
    Graphics2D g2d = ((Graphics2D) bufferImage.getGraphics());
    g2d.draw(rect);
    g2d.dispose();
     

    OutputStream out = null;
    try {
    out = new FileOutputStream("D:\\paint.jpg");

    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
    JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufferImage);
    param.setQuality(0.75f, true);
    encoder.encode(image, param);
    out.flush();
    out.close();
    } catch (Exception e1) {
    e1.printStackTrace();
    }
      

  3.   

    /**
     * 保存文件
     * 
     * @param file:文件路径
     */
    private void save(String file) {
    BufferedOutputStream imageOut;
    try {
    imageOut = new BufferedOutputStream(new FileOutputStream(new File(
    file)));
    JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(imageOut);
                            // getAreaImage()方法返回的是一个BufferedImage对象
                               // 只需把你的图像转换成BufferedImage对象放进去即可
    encoder.encode(getAreaImage());
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (ImageFormatException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }