Hallo, ein Kumpel von mir aus der Uni muss eine Aufgabe bearbeiten in welche er eine Animation erstellt. Der Bildschirmausschnitt soll dabei in einem Fenster von 98x98 Pixeln simuliert werden.
Wenn die Simulation gestartet wird, soll zusätzlich der Inhalt dieses Ausschnitts in kurzen regelmäßigen Abständen (z.B. alle 50 Millisekunden) im Format 98x7-1/128 in eine *.bml-Datei ausgegeben werden, so dass sich ein Film für das Projekt ergibt, den man z.B. in Blimp laden und abspielen kann. Die Stauchung um den Faktor
1/3 von 21 Pixel Höhe auf 7 Pixel Höhe ist dabei von dem Programm auszuführen. Wie bekommt man das hin mit dem abspeichern.
Vielleciht könnte ja jemand von euch mir einen Tipp geben. Ist wirklich dringend bei meinem Kumpel. Vielleicht habt ihr ja auch nen Link. Hab hier im Forum bisher noch nichts passendes gefunden.
Hier mal der Code
Wenn die Simulation gestartet wird, soll zusätzlich der Inhalt dieses Ausschnitts in kurzen regelmäßigen Abständen (z.B. alle 50 Millisekunden) im Format 98x7-1/128 in eine *.bml-Datei ausgegeben werden, so dass sich ein Film für das Projekt ergibt, den man z.B. in Blimp laden und abspielen kann. Die Stauchung um den Faktor
1/3 von 21 Pixel Höhe auf 7 Pixel Höhe ist dabei von dem Programm auszuführen. Wie bekommt man das hin mit dem abspeichern.
Vielleciht könnte ja jemand von euch mir einen Tipp geben. Ist wirklich dringend bei meinem Kumpel. Vielleicht habt ihr ja auch nen Link. Hab hier im Forum bisher noch nichts passendes gefunden.
Hier mal der Code
Code:
package Tut7;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ani extends JApplet implements ActionListener{
private JPanel animation;
private Timer timer;
private int appWidth;
private int appHeight;
private AnimatedPoints ani1, ani2, ani3, ani4, ani5;
/** Initializes the applet Anipolygon2 */
public void init() {
ani1 = new AnimatedPoints(10, 10, 2, 3, 1, 1, 5);
ani2 = new AnimatedPoints(300, 100, 3, 2, -1, 1, 10);
ani3 = new AnimatedPoints(30, 100, 3, 2, -1, 1, 10);
animation = new JPanel(){
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setPaint(new GradientPaint(30,50,Color.blue,100,100,Color.red,true));
int[] xx = new int[]{ani1.getx(),ani2.getx(),ani3.getx()};
int[] yy = new int[]{ani1.gety(),ani2.gety(),ani3.gety()};
g2d.fillPolygon(xx,yy,3);
}
};
getContentPane().add(animation);
appWidth = 98;
appHeight = 98;
timer = new Timer(2, this);
timer.start();
}
public void actionPerformed(ActionEvent e) {animation.repaint();}
class AnimatedPoints extends JLabel implements ActionListener{
private int deltaX = 2;
private int deltaY = 3;
private int directionX = 1;
private int directionY = 1;
private int nextX;
private int nextY;
public AnimatedPoints( int startX, int startY, int deltaX, int deltaY,
int directionX, int directionY, int delay){
this.deltaX = deltaX;
this.deltaY = deltaY;
this.directionX = directionX;
this.directionY = directionY;
setLocation(startX, startY);
new Timer(delay, this).start();
}
public int getx(){return nextX;}
public int gety(){return nextY;}
public void actionPerformed(ActionEvent e) {
Container parent = getParent();
// Determine next X position
nextX = getLocation().x + (deltaX * directionX);
if (nextX < 0) {
nextX = 0;
directionX *= -1;
}
if ( nextX + getSize().width > appWidth) {
nextX = appWidth - getSize().width;
directionX *= -1;
}
// Determine next Y position
nextY = getLocation().y + (deltaY * directionY);
if (nextY < 0) {
nextY = 0;
directionY *= -1;
}
if ( nextY + getSize().height > appHeight) {
nextY = appHeight - getSize().height;
directionY *= -1;
}
setLocation(nextX, nextY); //move the Point
}
}
}