xuehu808 2009-10-26 15:08
浏览 254
已采纳

applet中画出的图形如何保存为jpg格式的图片

import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;

public class DragApplet extends Applet
{
    private static final long serialVersionUID = 1L;
    private Image image;
    
    Point pressed = new Point();
    Point lastTranslate = new Point();

    public void init()
    {
        image = getImage(getDocumentBase(), "1.jpg");// 这里是加载图片的
        
        
        try
        {
            MediaTracker mt = new MediaTracker(this);
            mt.addImage(image, 0);
            mt.waitForID(0);
        }
        catch (InterruptedException e)
        {
            e.printStackTrace();
        }
        
        addMouseListener(new MouseAdapter()
        {
            public void mousePressed(MouseEvent e)
            {
                Point Ioc = e.getPoint();
                pressed.x = Ioc.x - lastTranslate.x;
                pressed.y = Ioc.y - lastTranslate.y;
            }
        });
        addMouseMotionListener(new MouseMotionAdapter()
        {
            public void mouseDragged(MouseEvent e)
            {
                Point Ioc = e.getPoint();
                Point translate = new Point(Ioc.x - pressed.x, Ioc.y
                        - pressed.y);
                Graphics g = getGraphics();
                try
                {
                    g.clearRect(0, 0, getSize().width, getSize().height);
                    g.translate(translate.x, translate.y);
                    showStatus("Translating   Graphics:" + translate);
                    g.drawImage(image, 0, 0, DragApplet.this);
                }
                finally
                {
                    g.dispose();
                }
                lastTranslate = translate;
            }
            
            
        });
    }

    public void update(Graphics g)// 我已经进行了消除闪动了???
    {
        paint(g);
    }

    public void paint(Graphics g)
    {
        g.drawImage(image, 0, 0, this);
    }
}

我如何才能将applet中的东西保存为jpg格式的图片呢?

 

我知道这个方法:

BufferedImage    bufImg = ImageIO.read(new File("e:\\4.jpg"));

 

输出方法:

 ImageIO.write(bufImg, ".JPEG", new File("e:\\2.jpg"));

 

但现在不清楚。。。如何把applet中画出的图形保存为一张图片呢?


问题补充:
该问题已经解决,在此谢谢热心帮助我的朋友们!

import java.applet.Applet;
import java.awt.Button;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.FileDialog;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

public class SaveApplet extends Applet implements ActionListener
{

private static final long serialVersionUID = 1L;

public SaveApplet() throws HeadlessException
{
    super();
}

BufferedImage bi;
Graphics gg = null;

Panel panel = null;
Button button1 = null;
Button button2 = null;

Image tempImage = null;
Canvas mycanvas = null;

public void init()
{
    bi = new BufferedImage(1024, 800, BufferedImage.TYPE_INT_RGB);
    gg = bi.getGraphics();

    panel = new Panel();
    button1 = new Button("open");
    button2 = new Button("save");

    panel.add(button1);
    panel.add(button2);

    add(panel);

    button1.addActionListener(this);
    button2.addActionListener(this);
}

public void paint(Graphics g)
{
    gg.setColor(Color.red);
    gg.drawRect(10, 10, 50, 50); // 红色画矩形
    gg.setColor(Color.blue);
    gg.fillOval(50, 50, 80, 80); // 蓝色圆形
    gg.dispose();

    g.drawImage(bi, 0, 0, this);

}

public void actionPerformed(ActionEvent e)
{
    if (e.getSource() == button1)
    {
        Frame f = new fileDialog("File Dialog Demo!");
        f.setVisible(false);
        f.setSize(100, 100);
        FileDialog fd1 = new FileDialog(f, "File Dialog", FileDialog.LOAD);
        fd1.setVisible(true);
        try
        {
            File f2 = new File(fd1.getDirectory(), fd1.getFile());
            FileInputStream readfile = new FileInputStream(f2);
            tempImage = ImageIO.read(new File(fd1.getDirectory(), fd1
                    .getFile()));

            mycanvas = new Canvas();
            mycanvas.setBounds(400, 300, 100, 100);
            add(mycanvas);

        }
        catch (IOException e1)
        {
            e1.printStackTrace();
        }

    }
    else if (e.getSource() == button2)
    {
        Frame f = new fileDialog("File Dialog Demo!");
        f.setVisible(false);
        f.setSize(100, 100);

        FileDialog fd = new FileDialog(f, "File Dialog", FileDialog.SAVE);
        fd.setVisible(true);
        try
        {
            // File f1 = new File(fd.getDirectory(), fd.getFile());
            // FileOutputStream out = new FileOutputStream(f1);
            //
            // JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            // JPEGEncodeParam param =
            // encoder.getDefaultJPEGEncodeParam(bi);
            // param.setQuality(1.0f, false);
            // encoder.setJPEGEncodeParam(param);
            // encoder.encode(bi);
            // out.close();

            if (fd.getFile() != null)
            {
                String pathStr = fd.getDirectory();

                pathStr = pathStr.replace("\\", "\\\\");
                String path = pathStr + fd.getFile();

                ImageIO.write(bi, "JPEG", new File(path));
            }

        }
        catch (IOException e2)
        {
            e2.printStackTrace();
        }
    }

}

class fileDialog extends Frame
{

    private static final long serialVersionUID = 1L;

    fileDialog(String title)
    {
        super(title);
        MyWindowAdapter adapter = new MyWindowAdapter(this);
        addWindowListener(adapter);
    }
}

class MyWindowAdapter extends WindowAdapter
{
    fileDialog sf;

    public MyWindowAdapter(fileDialog sfr)
    {
        this.sf = sfr;
    }

    public void windowClosing(WindowEvent we)
    {
        sf.setVisible(false);
    }
}

}

  • 写回答

1条回答 默认 最新

  • Ryankay 2009-10-29 10:43
    关注

    [code="java"]
    import com.sun.image.codec.jpeg.JPEGCodec;
    import com.sun.image.codec.jpeg.JPEGImageEncoder;

    try {
    FileOutputStream outstream=new FileOutputStream(url);
    JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(outstream);
    encoder.encode(image);
    outstream.close();
    } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    [/code]

    除了JPEGImageEncoder 还有很多Encoder你可以查一下API,这个不需要格外导入JAR包,JDK默认支持的,是SUN提供的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记