Image speichern: Externes Bild wird nicht mitgespeichert

acky

Mitglied
hi,

hier habe ich mit java eine schlichte grafik erzeugt, die ich sowohl in einem JFrame ausgebe und auf der festplatte speichere.
in dieser grafik verwende ich ein externen bild. dieses wird im JFrame angezeigt - aber nicht mitgespeichert.

hat jemand eine idee, woran dies liegt bzw. wo ich da ansetzen kann?

Code:
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.geom.Line2D;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class MainFrame extends JFrame {

	File file;
	
	public MainFrame() {
		
		URL url = this.getClass().getResource("MainFrame.java");		
		Panel panel = new Panel();
		file = new File(url.getFile());
		String target = file.getParent() + "\\Image.png";
		
		try {
			panel.writeImage(target);
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		this.setSize(560,280);
		this.setLocation(200,200);
		this.getContentPane().add(panel);
		this.setVisible(true);
	}
	
	public static void main(String[]args) {
		new MainFrame();
	}
	
	public class Panel extends JPanel {
		
		Color cGardient1 = new Color(0.8f, 0.8f, 0.8f);
		Color cGardient2 = new Color(1f, 1f, 1f);
		Color cHeader = Color.GRAY;
		Color cLogo = new Color(12, 107, 139);
		Point2D.Float pointGardient1 = new Point2D.Float(200, 20);
		Point2D.Float pointGardient2 = new Point2D.Float(200, 100);
		GradientPaint gradientPaint = new GradientPaint(pointGardient1, cGardient1, pointGardient2, cGardient2, false);
		Rectangle rectBackground = new Rectangle(0, 0, 560, 280);
		Rectangle rectShadow = new Rectangle(28, 28, 500, 200);
		Rectangle rectCanvas = new Rectangle(20, 20, 500, 200);
		Rectangle rectHeader = new Rectangle(20, 20, 500, 25);
		
		public void paint(Graphics g) {
			
			super.paintComponent(g);
			Graphics2D g2d = (Graphics2D) g;
			g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
			g2d.clearRect(0, 0, 560, 280);
			
			// Gesamtfläche
			AlphaComposite comp = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.1f);
			g2d.setComposite(comp);
			g2d.setColor(Color.WHITE);
			g2d.fill(rectBackground);
			
			// Schatten
			comp = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f);
			g2d.setComposite(comp);
			g2d.setColor(Color.GRAY);
			g2d.fill(rectShadow);
			// Canvas
			g2d.setPaint(gradientPaint);
			g2d.fill(rectCanvas);
			
			// Header
			comp = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f);
			g2d.setComposite(comp);
			g2d.setColor(new Color(255, 128, 22));
			
			//g2d.setColor(cLogo);
			g2d.fill(rectHeader);
			
			// Linienraster
			g2d.setColor(Color.LIGHT_GRAY);
			comp = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.7f);
			g2d.setComposite(comp);
			g2d.draw(new Line2D.Float(new Point2D.Float(20, 190), new Point2D.Float(520, 190)));
			g2d.draw(new Line2D.Float(new Point2D.Float(20, 160), new Point2D.Float(520, 160)));
			g2d.draw(new Line2D.Float(new Point2D.Float(20, 130), new Point2D.Float(520, 130)));
			g2d.draw(new Line2D.Float(new Point2D.Float(20, 100), new Point2D.Float(520, 100)));
			g2d.draw(new Line2D.Float(new Point2D.Float(20, 70), new Point2D.Float(520, 70)));
			
			// Symbol Logo
			// TODO: Grafik einbinden
			Image img = this.getToolkit().getImage(this.getClass().getResource("SymbolGrau.png"));
			comp = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
			g2d.setComposite(comp);
			g2d.drawImage((Image) img, 230, 100, this);
			
			// Text Header
			String header = "Graphics";
			Font arialSmall = new Font("Verdana", Font.BOLD, 11);
			g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
			comp = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f);
			g2d.setComposite(comp);
			g2d.setFont(arialSmall);
			g2d.setColor(Color.WHITE);
			g2d.drawString(header, 395, 38);
			
			// Text Information
			String info = "Auswertung: 03.02.2005 - 31.10.2005";
			Font verdana = new Font("Verdana", Font.PLAIN, 10);
			g2d.setFont(verdana);
			g2d.setColor(Color.BLACK);
			g2d.drawString(info, 27, 215);
			
			// Rahmen Header
			g2d.setColor(Color.DARK_GRAY);
			g2d.draw(rectHeader);
			
			// Rahmen Canvas
			BasicStroke st = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND);
			g2d.setStroke(st);
			g2d.setColor(Color.BLACK);
			g2d.draw(rectCanvas);
			
			// Text Logo
			String logo = "Graphics";
			Font font = new Font("Arial", Font.BOLD, 24);
			g2d.setFont(font);
			g2d.setColor(cHeader);
			AffineTransform at = new AffineTransform();
			at.setToTranslation(505, 202);
			g2d.setTransform(at);
			at.setToRotation(-Math.PI / 2.0);
			g2d.transform(at);
			g2d.drawString(logo, 0, 0);
		}
		
		public void writeImage(String target) throws Exception {
			
			BufferedImage bufferedImage = new BufferedImage(560, 280, BufferedImage.TYPE_INT_RGB);
			Graphics g = bufferedImage.getGraphics();	
			this.paint(g);	        
			try {
				ImageIO.write(bufferedImage, "png", new File(target) );
			} catch(IOException e) {
				e.getStackTrace();
			}
		}
	}
}
 

Neue Beiträge

Zurück