Hallo,
ich programmiere gerade eine kleine Grafikanwendung und habe folgendes Problem: Ich schneide mit getSubimage aus einem BufferedImage ein kleines Stück heraus und versuche es dann mit drawImage zu zeichnen. Leider passiert da gar nichts. Das Zeichnen vom einem BufferedImage funktionert jedoch. Was mache ich falsch? Hier der Code:
Danke für die Antworten
ich programmiere gerade eine kleine Grafikanwendung und habe folgendes Problem: Ich schneide mit getSubimage aus einem BufferedImage ein kleines Stück heraus und versuche es dann mit drawImage zu zeichnen. Leider passiert da gar nichts. Das Zeichnen vom einem BufferedImage funktionert jedoch. Was mache ich falsch? Hier der Code:
Java:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.Font;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class Game extends JPanel implements Runnable {
//private Image star, integral, test2;
private BufferedImage bad ,audi, test;
//private BufferedImage[] teile = new BufferedImage[3];
private Thread animator;
private int x, y;
public Font f1;
public long frameRate = 0;
public long frames = 0;
public long seconds = 0;
private final int DELAY = 25; // Framerate: 40 Bilder pro Sekunde
public Game() {
int width;
int height;
//setBackground(Color.WHITE);
setDoubleBuffered(true);
/*
ImageIcon ii = new ImageIcon(this.getClass().getResource("star.png"));
star = ii.getImage();
ImageIcon i2 = new ImageIcon(this.getClass().getResource("integral.png"));
integral = i2.getImage();
*/
try
{
audi = ImageIO.read( new File("audi.png") ) ;
}
catch(IOException ex)
{
ex.printStackTrace();
System.out.println("Datei nicht gefunden");
System.exit(1);
}
try
{
bad = ImageIO.read( new File("bad.png") ) ;
}
catch(IOException ex)
{
ex.printStackTrace();
System.out.println("Datei nicht gefunden");
System.exit(1);
}
width = bad.getWidth();
height = bad.getHeight();
BufferedImage bad = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
width = audi.getWidth();
height = audi.getHeight();
BufferedImage audi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
//BufferedImage test = new BufferedImage(200, 200, BufferedImage.TYPE_INT_ARGB);
test = audi.getSubimage(100, 100, 200, 200);
/*
test2 = audi.getSubimage(100, 100, 200, 200);
teile[0] = audi.getSubimage(0, 0, 200, 200);
teile[1] = audi.getSubimage(100, 100, 50, 50);
teile[2] = audi.getSubimage(200, 200, 50, 50);
*/
f1 = new Font("Arial",Font.BOLD,20);
x = y = 10;
}
public void addNotify() {
super.addNotify();
animator = new Thread(this);
animator.start();
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
g2d.drawImage(audi, 0, 0, this);
//g2d.drawImage(star, x, y, this);
//g2d.drawImage(integral, 200, 200, this);
g2d.drawImage(bad, 200+x, 200+y, this);
/*
g2d.drawImage(teile[0],0,0,this);
g2d.drawImage(teile[1],500,200,this);
g2d.drawImage(teile[2],300,300,this);
*/
g2d.drawImage(test,150,150,this);
g2d.setColor(Color.WHITE);
g2d.setFont(f1);
g2d.drawString("Framerate: " + frameRate,850,30);
g2d.drawString("Sekunden: " + seconds,850,50);
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
public void cycle() {
x += 1;
y += 1;
if (y > 440) {
y = -45;
x = -45;
}
}
public void run() {
long beforeTime, timeDiff, sleep;
long fTime=0, dTime;
beforeTime = System.currentTimeMillis();
while (true) {
cycle();
repaint();
dTime = System.currentTimeMillis() - fTime;
timeDiff = System.currentTimeMillis() - beforeTime;
sleep = DELAY - timeDiff;
if (sleep < 0)
sleep = 25;
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
System.out.println("interrupted");
}
beforeTime = System.currentTimeMillis();
if(dTime >= 1000)
{
frameRate = frames * 1000 / dTime;
frames = 0;
fTime = System.currentTimeMillis();
seconds++;
}
frames++;
}
}
}