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?
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();
}
}
}
}