zapis do pliku jpg

0

jak mam zapisac to co na panelu narysowałem do pliku jpg po prostu rysuje sobie po panelu i chce to zapisac do pliku jpg

 saveAction.addActionListener(new ActionListener() {
		
		@Override
		public void actionPerformed(ActionEvent arg0) {
			  BufferedImage bi = new BufferedImage(mf.getWidth(), mf.getHeight(), BufferedImage.TYPE_INT_RGB);
			  Graphics2D d2d = bi.createGraphics();
			  File out = new File("image.jpg");
			  panel.paint(d2d);
			  
			  try {
			        ImageIO.write(bi, "jpg", out);
			    } catch (IOException ox) {
			        // TODO: handle exception
			        ox.printStackTrace();

			}
			// TODO Auto-generated method stub
			
		}
	});

mam cos takiego ale nic sie nie dzieje po tym juz nie wiem sam

package paintv1;



import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Panel;

import javax.swing.JFrame;

public class MainFrame extends JFrame {
	 
		private static final long serialVersionUID = 1L;
		private static final Dimension SIZE = new Dimension(800, 600);
		private DrawPanel panel = new DrawPanel();
		
		public MainFrame(){
			super("Java Paint");
			setLayout(new BorderLayout());
			
			Pasek topOkno = new Pasek();
			setJMenuBar(topOkno);
			
			this.add(panel, BorderLayout.CENTER);
			DrawControls con = new DrawControls(panel);
			this.add(con, BorderLayout.NORTH);
			setSize(SIZE);
			setResizable(true);
			setLocationRelativeTo(null);
			setDefaultCloseOperation(EXIT_ON_CLOSE);
			setVisible(true);
		}
	
		}
 

i jeszcze klasa DrawPanel

package paintv1;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Panel;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.Vector;

import javax.imageio.ImageIO;

public class DrawPanel extends Panel implements MouseListener, MouseMotionListener {
	/**
	 * @return 
	 * 
	 */

	private static final long serialVersionUID = 1L;
	public static final int LINIA = 0;
    public static final int FREEHAND = 1;
    public static final int PROSTOKAT = 2;
    public static final int OKRAG = 3;
    public static final int PROSTOKAT_PELNY = 4;
    public static final int OKRAG_PELNY = 5;


    int mode = LINIA; //linia - defoltowa
	Vector<objekt> figury = new Vector<objekt>();       //Vector, w którym zapamiętywane sš dane figur
    Vector<Color> kolory = new Vector<Color>();      //Vector, w którym zapamiętywane sš kolory figur
    int x1,y1; // wspolrzedne poczatku
    int x2,y2; // wspolrzedne konca
   
    public DrawPanel() 
    {
		setBackground(Color.white);//ustawienie tła na białe
		addMouseMotionListener(this);// obsluga myszy
		addMouseListener(this); // obsluga myszy
    }
    public void setDrawMode(int mode)       //wybór trybu rysowania 
	 {
	  switch (mode) 
	  {
	  case LINIA:
	   case FREEHAND:
	   case PROSTOKAT:
	   case PROSTOKAT_PELNY:
	   case OKRAG:
	   case OKRAG_PELNY:
	   this.mode = mode;// ustawienie aktualnego trybu rysowania
	   break;
	   default:
	   throw new IllegalArgumentException();
	  }
    }

	@Override
	public void mouseDragged(MouseEvent e) {
		 e.consume();
	       switch (mode) 
	       {
	            case LINIA:
	                x2 = e.getX();
	                y2 = e.getY();
	                break;
	            case PROSTOKAT:
	                x2 = e.getX();
	                y2 = e.getY();
	                break;
	            case OKRAG:
	                x2 = e.getX();
	                y2 = e.getY();
	                break;
	            case FREEHAND:
	                kolory.addElement(getForeground());    //zapamiętanie w zmiennej typu Vector koloru lini
	                figury.addElement(new objekt(x1, y1, e.getX(), e.getY(),0)); //dodanie do Vector obiektu z parametrami lini składajšcej się na FREEHAND
	                x1 = e.getX();
	                y1 = e.getY();
	                break;
	            case PROSTOKAT_PELNY:
	                x2 = e.getX();
	                y2 = e.getY();
	                break;
	            case OKRAG_PELNY:
	                x2 = e.getX();
	                y2 = e.getY();
	                break;
	        }
	        repaint();
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseMoved(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseClicked(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseEntered(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mouseExited(MouseEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void mousePressed(MouseEvent e) {
		 e.consume();
	        switch (mode) 
	        {
	            case LINIA:
	                x1 = e.getX();
	                y1 = e.getY();
	                x2=-1;
	                break;
	            case PROSTOKAT:
	                x1 = e.getX();
	                y1 = e.getY();
	                x2=-1;
	                break;
	            case OKRAG:
	                x1 = e.getX();
	                y1 = e.getY();
						 x2=-1;
	                break;
	            case FREEHAND:
	                kolory.addElement(getForeground()); //j.w.
	                figury.addElement(new objekt(e.getX(), e.getY(), e.getX(), e.getY(),0));
	                x1 = e.getX();
	                y1 = e.getY();
	                break;
	            case PROSTOKAT_PELNY:
	                x1 = e.getX();
	                y1 = e.getY();
	                x2=-1;
	                break;
	            case OKRAG_PELNY:
	                x1 = e.getX();
	                y1 = e.getY();
						 x2=-1;
	                break;
	               
	        }
		// TODO Auto-generated method stub
	        repaint();
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		   e.consume();
	        switch (mode) 
	        {
	            case LINIA:
	                kolory.addElement(getForeground());
	                figury.addElement(new objekt(x1, y1, e.getX(), e.getY(),1));
	                x2=-1;
	                break;
	            case PROSTOKAT://zapamiętuje kolor,współrzędne poczštku x1,y1,współrzędne w momencie puszczenia klawisza,rodzaj figury(2-prostokšt) 
	                kolory.addElement(getForeground());
	                figury.addElement(new objekt(x1, y1,e.getX(),e.getY(),2));
	                x2=-1;
	                break;

	            case OKRAG:
	                kolory.addElement(getForeground());
	                figury.addElement(new objekt(Math.min(x1,e.getX()),Math.min(y1,e.getY()),Math.abs(e.getX()-x1),Math.abs(e.getY()-y1),3));
	                x2 = -1;
	                break;
	            case FREEHAND:
	            default:
	                break;
	            case PROSTOKAT_PELNY://zapamiętuje kolor,współrzędne poczštku x1,y1,współrzędne w momencie puszczenia klawisza,rodzaj figury(2-prostokšt) 
	                kolory.addElement(getForeground());
	                figury.addElement(new objekt(x1, y1,e.getX(),e.getY(),4));
	                x2=-1;
	                break;

	            case OKRAG_PELNY:
	                kolory.addElement(getForeground());
	                figury.addElement(new objekt(Math.min(x1,e.getX()),Math.min(y1,e.getY()),Math.abs(e.getX()-x1),Math.abs(e.getY()-y1),5));
	                x2 = -1;
	                break;
	        }
	        repaint();
		// TODO Auto-generated method stub
	}
	        public void paint(Graphics g)    
	   	 {
	   	  int np = figury.size();        
	   	  g.setColor(getForeground());    
	   	  for (int i=0; i < np; i++)      //rysowanie wszystkich figur zapamiętanych w vektorze
	   	    {
	   	     objekt o = (objekt)figury.elementAt(i); 
	   	     g.setColor((Color)kolory.elementAt(i)); 
	          if (o.typ==1||o.typ==0)g.drawLine(o.x3, o.y3, o.x4,o.y4);
	    	   if (o.typ==2){if (o.x4<o.x3&&o.y4<o.y3) g.drawRoundRect(o.x4,o.y4,Math.abs(o.x4-o.x3),Math.abs(o.y4-o.y3),0,0); //jeli prostokšt
	   		     				   if (o.x4>o.x3&&o.y4>o.y3) g.drawRoundRect(o.x3,o.y3,Math.abs(o.x4-o.x3),Math.abs(o.y4-o.y3),0,0);
	   						      if (o.x3<o.x4&&o.y3>o.y4) g.drawRoundRect(o.x4-Math.abs(o.x4-o.x3),o.y4,Math.abs(o.x4-o.x3),Math.abs(o.y4-o.y3),0,0);
	   						      if (o.x3>o.x4&&o.y3<o.y4) g.drawRoundRect(o.x4,o.y4-Math.abs(o.y4-o.y3),Math.abs(o.x4-o.x3),Math.abs(o.y4-o.y3),0,0);  } 

	   	     if (o.typ==3) g.drawOval(o.x3,o.y3,o.x4,o.y4);
	   	     if (o.typ==4){
	   	    	 if (o.x4<o.x3&&o.y4<o.y3) g.fillRoundRect(o.x4,o.y4,Math.abs(o.x4-o.x3),Math.abs(o.y4-o.y3),0,0); 
				   if (o.x4>o.x3&&o.y4>o.y3) g.fillRoundRect(o.x3,o.y3,Math.abs(o.x4-o.x3),Math.abs(o.y4-o.y3),0,0);
			      if (o.x3<o.x4&&o.y3>o.y4) g.fillRoundRect(o.x4-Math.abs(o.x4-o.x3),o.y4,Math.abs(o.x4-o.x3),Math.abs(o.y4-o.y3),0,0);
			      if (o.x3>o.x4&&o.y3<o.y4) g.fillRoundRect(o.x4,o.y4-Math.abs(o.y4-o.y3),Math.abs(o.x4-o.x3),Math.abs(o.y4-o.y3),0,0);  } 
	   	  if (o.typ==5)g.fillOval(o.x3,o.y3,o.x4,o.y4);
	   	  	 }
	   	 
	   		   
	   	 //rysowanie konturów rysowanych figur
	   	  if (mode == LINIA) 
	   	  {
	   	     g.setColor(getForeground());
	   	     if (x2 != -1) g.drawLine(x1, y1, x2, y2);
	   	  }
	   	  if (mode == PROSTOKAT) 
	     	    {g.setColor(getForeground());
	     	     if (x2 != -1) {if (x1<x2&&y1<y2)g.drawRoundRect(x1, y1,Math.abs(x2-x1),Math.abs(y2-y1),0,0);
	   	       				  if (x1>x2&&y1>y2)g.drawRoundRect(x2, y2,Math.abs(x2-x1),Math.abs(y2-y1),0,0);
	   					        if (x1<x2&&y1>y2)g.drawRoundRect(x2-Math.abs(x2-x1),y2,Math.abs(x2-x1),Math.abs(y2-y1),0,0);
	   					        if (x1>x2&&y1<y2)g.drawRoundRect(x2, y2-Math.abs(y2-y1),Math.abs(x2-x1),Math.abs(y2-y1),0,0); }
	   	    }
	   	  if (mode == PROSTOKAT_PELNY) 
   	    {
	   		  g.setColor(getForeground());
   	     if (x2 != -1) {if (x1<x2&&y1<y2)g.fillRoundRect(x1, y1,Math.abs(x2-x1),Math.abs(y2-y1),0,0);
 	       				  if (x1>x2&&y1>y2)g.fillRoundRect(x2, y2,Math.abs(x2-x1),Math.abs(y2-y1),0,0);
 					        if (x1<x2&&y1>y2)g.fillRoundRect(x2-Math.abs(x2-x1),y2,Math.abs(x2-x1),Math.abs(y2-y1),0,0);
 					        if (x1>x2&&y1<y2)g.fillRoundRect(x2, y2-Math.abs(y2-y1),Math.abs(x2-x1),Math.abs(y2-y1),0,0); }
 	    }
	   	  if (mode == OKRAG_PELNY) 
	     	  {
	   	     g.setColor(getForeground());
	     	     if (x2 != -1) g.fillOval(Math.min(x1,x2),Math.min(y1,y2),Math.abs(x2-x1),Math.abs(y2-y1));
	   	  }
	     }
	   
}
//zamieniłem 

na

// - bogdans
 
0

Dopisz do metody actionPerformed jeden wiersz

        public void actionPerformed(ActionEvent arg0) {
              System.out.println("width = "+mf.getWidth()+" height = "+mf.getHeight());
              BufferedImage bi = new BufferedImage(mf.getWidth(), mf.getHeight(), BufferedImage.TYPE_INT_RGB);

Dowiesz się czy metoda actionPerformed się wykonuje i czy rozmiar tworzonego w pamięci obrazka jest różny od zera.

0

Wyswietla cos takiego
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at paintv1.Pasek$7.actionPerformed(Pasek.java:154)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

0

Zapewne mf jest nullem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1