Abspeichern einer Animation in *.bmp

Status
Nicht offen für weitere Antworten.

TheDestroyer

Aktives Mitglied
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

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 
        } 
    } 
}
 

André Uhres

Top Contributor
TheDestroyer hat gesagt.:
..Der Bildschirmausschnitt soll dabei in einem Fenster von 98x98 Pixeln simuliert werden.
Wenn ich das richtig sehe, dann ist das ja schon der Fall, oder?
TheDestroyer hat gesagt.:
..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..
Das Abspeichern besorgt "ImageIO.write".
Mit dem Format komm ich net klar. Das Bild ist jetzt 98x98 und du willst 98x7 speichern oder was?
Und .bml ist sicher ein Schreibfehler: soll wohl .bmp heissen?
 

TheDestroyer

Aktives Mitglied
Hab mir gerade mal die Aufgabestellung besorgt.

Aufgabe zum BlueBox-Projekt
Schreiben Sie ein Java-Programm, dass einen einfachen physikalischen Vorgang,
wie z.B.
a) die Bewegung eines Gummiballs in einem Kasten ohne Gravitationseinwirkung
b) das Hüpfen eines Gummiballs in einem Kasten unter Gravitationseinwirkung
c) das Kreisen einer Masse um eine andere
d) das Schwingen eines Pendels
in einem Bildschirmausschnitt von 98x98 Pixeln simuliert. Dabei sollen mindestens zwei
Parameter, wie z.B. die Größe des Gummiballs oder die initiale Flugrichtung mit Hilfe
geeigneter GUI-Elemente einstellbar sein.
Weiter soll ein rechteckiger Ausschnitt der Größe 98x21 Pixel ausgewählt werden
können. (Dieser Ausschnitt ist also nur in der Höhe verstellbar.)
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 bluebox
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 Ihren Programm auszuführen. Dies
ist notwendig, da benachbarte Fenster des Blauen Bocks in vertikaler Richtung dreimal
so weit voneinander entfernt sind wie in horizontaler Richtung.

Sorry war ein Schreibfehler meinerseits. soll bmp heißen.
 

André Uhres

Top Contributor
TheDestroyer hat gesagt.:
... im Format 98x7-1/128 in
eine *.bml-Datei ausgegeben werden...
Sorry war ein Schreibfehler meinerseits. soll bmp heißen.
Das ist wieder eine Widerspruch. bml und bmp sind zwei grundverschiedene Formate.
bml ist eine Markup Language und bmp ist ein Bildformat für ein einzelnes Bild pro Datei.
Du musst dich also entscheiden (mit bml kann ich allerdings nix anfangen :bae: ).
 

KSG9|sebastian

Top Contributor
warum steht dann in der aufgabenstellung "bml"?
wie du das machen könntest:

bei start der simulation einen thread starten
Code:
boolean interupted = false;
Runnable run = new Runnable(){
  public void run(){
    while(!interupted){
       //Bild speichern mit ImageIO.write
      Thread.sleep(50); //50ms warten
    }
  }
}

Dazu eben mal Thread, Runnable, ImageIO anschauen.
synchronized wirst du wohl auch noch brauche bzw. mal ein Kapitel zu Swing/AWT und Threading anschauen
 

André Uhres

Top Contributor
KSG9|sebastian hat gesagt.:
warum steht dann in der aufgabenstellung "bml"?
..
Beispiel einer bml Datei:
Code:
<?xml version="1.0"?>
<blm width="26" height="20" bits="4" channels="1">
    <header>
        <title>Alfred Hitchcock</title>
        <description>A portrait of the grandmaster of suspense</description>
        <creator>ArcadePaint</creator>
        <author>J. Random Hacker</author>
        <email>my@email.com</email>
        <url>http://my.home.page/</url>
    </header>

    <frame duration="200">
        <row>00000001369ceec95100000000</row>
        <row>0000127acdeffffffe94000000</row>
        <row>0015569bcdeeeeffffffb50000</row>
        <row>01421465779eeeedccdefeb100</row>
        <row>0110026bdd77deddeeedeed300</row>
        <row>000011136aa5ced979bcdcc200</row>
        <row>0000688acb65bddeddeefca100</row>
        <row>000028abca11468deedddb8200</row>
        <row>0000247bc30248acddcccbc700</row>
        <row>0000025ba668abcbcdcbbad600</row>
        <row>00000069525779baacca99c400</row>
        <row>0000002850013557baaa966100</row>
        <row>00000003212469baaa98710000</row>
        <row>00000000000001354368300000</row>
        <row>00000000000001377567100000</row>
        <row>000010000000169b98ae400000</row>
        <row>00001100000002699dff700000</row>
        <row>000001225887203affffb10000</row>
        <row>0000469bdee60012afffb10000</row>
        <row>00003cadfffa118eceef710000</row>
    </frame>
</blm>
Und darin liegt ja das Problem: das Format der bml Datei ist mit ImageIO wohl schwer zu verarbeiten.
Das Threadproblem ist ja trivial: könnte man auch mit einem Timer lösen.
 

TheDestroyer

Aktives Mitglied
sorry nochmal also soll bml sein. hatte gestern ne menge stress um die ohren, da bin ich mal durcheinander gekommen!!! Sorry
 

André Uhres

Top Contributor
TheDestroyer hat gesagt.:
sorry nochmal also soll bml sein..
Und ihr habt keinerlei Beispielcode zum Umgang mit bml-Dateien ?
Afaik kann Java das nicht standardmässig verarbeiten.
Wisst ihr überhaupt wie die Inhalt strukturmässig aussehen soll?
 

FatFire

Bekanntes Mitglied
Hm, also ich versteh jetzt nicht so ganz, wo das Problem ist. BML basiert auf XML (gute Erklärung für BML gibt es hier ), gut, es stimmt, daß es da standardmässig keine Verarbeitungsfunktion in Java für gibt, aber es gibt verschiedene Möglichkeiten auf XML-Dokumente zuzugreifen (DOM, SAX und wie sie nicht alle heißen, Beschreibungen dafür gibt es hier ). Deine BML-Implementierung mußt Du Dir dann schon selbst schreiben (das ist kein Ding, so sonderlich viele Tags sind das bei BML nicht und Deinem Code entnehme ich jetzt auch mal, daß Du kein kompletter Noob bist was das programmieren angeht). Um dann die einzelnen Farbwerte in das BML-Format zu bekommen, mußt Du die Farbwerte der einzelnen Pixel des Bildausschnitts auslesen (die Stauchung würde ich an Deiner Stelle über die Mittelung dreier übereinanderliegender Pixel realisieren, so wären drei Pixel hell, zwei Pixel mittel, ein Pixel dunkler und kein Pixel schwarz) und das Ergebnis als Hexadezimalwert speichern (da in der Simulation ja wohl keine Graustufen vorkommen, außer durch das Mitteln der Werte durch Stauchung, müßtest Du also mit 2 Bit für das BML-Format hinkommen).
Ach ja, das zurechtschnippeln des Bildausschnittes und das Pixel für Pixel auslesen geht sehr einfach mit BufferedImage (guckst Du hier ).
Wenn das jetzt keiner verstanden hat oder es keine wirkliche Hilfe darstellt, tut einfach so als hätte ich nix gesagt und führt ruhig weiter das "BML?"-"BMP"-"BMP?"-"BML!"-Frage und Antwortspiel weiter :D
 

FatFire

Bekanntes Mitglied
André Uhres hat gesagt.:
Und .bml ist sicher ein Schreibfehler: soll wohl .bmp heissen?
André Uhres hat gesagt.:
Wer lesen kann ist klar im Vorteil.
Muß ich jetzt wie Du noch einen Standardspruch mit Glashaus ablassen oder kann ich das jetzt mal kommentarlos so stehen lassen? Ich hab den Beiträgen halt nur entnommen, daß da lieber ne sinnlose Diskussion geführt wird (völlig überflüssig, denn spätestens bei den Stichworten Blimp und blauer Bock hätte klar sein können, daß da .bml durchaus Sinn macht) anstatt konstruktive Hilfe zu bieten. Dann will man da aushelfen und kriegt nur so einen Spruch wie "Wer lesen kann ist klar im Vorteil" zu hören...naja, irgendwie muß man da seinem Rang als Labertasche wohl auch einfach gerecht werden...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Inhalt von einer csv-Datei abspeichern Java Basics - Anfänger-Themen 3
J Datensätze aus einer DB als Objekte erzeugen und in ArrayList abspeichern Java Basics - Anfänger-Themen 9
A Abspeichern von werten in einer textfile. Java Basics - Anfänger-Themen 2
D Datentypen Wie am Besten abspeichern Java Basics - Anfänger-Themen 1
T Unterschiedliche Datentypen - worin abspeichern? Java Basics - Anfänger-Themen 18
R Text in der DB abspeichern, und danach bearbeiten Java Basics - Anfänger-Themen 5
izoards Textdatei Human unreadable abspeichern Java Basics - Anfänger-Themen 17
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
P Enums in Array abspeichern Java Basics - Anfänger-Themen 4
D Collections Arrays in ArrayList abspeichern Java Basics - Anfänger-Themen 6
N Zwei Daten (Datum) miteinander vergleichen, abspeichern, laden Java Basics - Anfänger-Themen 4
S Image Datei selektieren und in Projekt Verzeichnis abspeichern/kopieren Java Basics - Anfänger-Themen 16
R Benutzereingaben als Array abspeichern nach Programmstart Java Basics - Anfänger-Themen 5
D integer negativen Wert abspeichern Java Basics - Anfänger-Themen 3
N Was passiert wenn wir Daten auf der Festplatte abspeichern wollen? bzgl. BufferStreams Java Basics - Anfänger-Themen 9
A Eingelesene Daten in Array(Liste) abspeichern? Java Basics - Anfänger-Themen 18
B Zahl in String abspeichern und später berechnen Java Basics - Anfänger-Themen 15
x-tshainge Konsoleneingabe in datei Abspeichern Java Basics - Anfänger-Themen 3
B Methoden Konsoleneingabe Abspeichern Java Basics - Anfänger-Themen 3
M Netbeans Projekt lauffähig abspeichern Java Basics - Anfänger-Themen 3
M In Netbeans Programm so abspeichern dass es funktioniert Java Basics - Anfänger-Themen 8
E Erste Schritte txt.Datei mit BufferedReader einlesen und in 2D-Array abspeichern Java Basics - Anfänger-Themen 15
D InputStream parsen und als Bilddatei abspeichern Java Basics - Anfänger-Themen 1
V Datentypen Richtiges Format abspeichern Java Basics - Anfänger-Themen 13
R Eine Arrayliste in XML abspeichern und laden können Java Basics - Anfänger-Themen 7
C Datentypen Zeile aus mehrdimensionalem Array extrahieren uns abspeichern Java Basics - Anfänger-Themen 6
I google java-diff-util - Patch abspeichern Java Basics - Anfänger-Themen 1
B Quellcode einelsen "line by line" (und abspeichern in file (txt) Java Basics - Anfänger-Themen 7
A JFreeChart als png abspeichern Java Basics - Anfänger-Themen 2
J Werte der For-Schleife in Array abspeichern Java Basics - Anfänger-Themen 1
F Textdatei einlesen in ArryList (Objekte abspeichern?) Java Basics - Anfänger-Themen 4
M Riesige Zahlen abspeichern Java Basics - Anfänger-Themen 3
L Logdatei durchsuchen, Suchstand abspeichern? Java Basics - Anfänger-Themen 9
L JTextField auslesen mit getText() wie abspeichern? Java Basics - Anfänger-Themen 2
L Modulo Reste abspeichern und wiedergeben ? Java Basics - Anfänger-Themen 4
HoloYoitsu Array´s in eine art Liste abspeichern? Java Basics - Anfänger-Themen 6
D Graphen abspeichern (Gewichte) Java Basics - Anfänger-Themen 9
M Eine Klasse als .dmg (MAc) abspeichern Java Basics - Anfänger-Themen 5
S XML Datei in ArrayList abspeichern Java Basics - Anfänger-Themen 3
0 Mauskoordinaten abspeichern/aufnehmen Java Basics - Anfänger-Themen 7
algebraiker Nach letztem / Datei abspeichern Java Basics - Anfänger-Themen 5
N gerichteten Graph abspeichern Java Basics - Anfänger-Themen 2
D Objekt in Array abspeichern Java Basics - Anfänger-Themen 7
B ABspeichern eines sehr grossen negativen Werts Java Basics - Anfänger-Themen 6
J PW von Datenbank wie abspeichern? Java Basics - Anfänger-Themen 2
F verschiedene Daten abspeichern Java Basics - Anfänger-Themen 13
N Input/Output .txt-Datei einlesen, aufteilen und seperat abspeichern Java Basics - Anfänger-Themen 3
H Wie kann ich offline ein Java Programm abspeichern Java Basics - Anfänger-Themen 14
MU5T4NG JPasswordField als Hash in Datenbank abspeichern Java Basics - Anfänger-Themen 3
O Serialisierung: Object abspeichern und aufrufen Java Basics - Anfänger-Themen 6
F Zahl abspeichern Java Basics - Anfänger-Themen 4
L Datentypen Methode zum Abspeichern von Variablen mit größeren int-Werten Java Basics - Anfänger-Themen 6
S Textfragmente aus Quellcode lesen und abspeichern Java Basics - Anfänger-Themen 2
D Ein Objekt erzeugt ein anderes Objekt - Wie beide Objekte abspeichern? Java Basics - Anfänger-Themen 5
Antoras Daten in Klasse abspeichern Java Basics - Anfänger-Themen 6
J Highscore-Liste abspeichern Java Basics - Anfänger-Themen 6
S mehrere Werte zu einem Key abspeichern Java Basics - Anfänger-Themen 3
S Zyklisches abspeichern von Daten aus einr MySql Datenbank Java Basics - Anfänger-Themen 9
G Frage zum Abspeichern von Java-Klassen Java Basics - Anfänger-Themen 9
G Instanz-Rückgabewerte abspeichern Java Basics - Anfänger-Themen 2
S Werte aus Datei lesen und in Variable abspeichern Java Basics - Anfänger-Themen 4
C txt - Datei auswählen und in texarea abspeichern Java Basics - Anfänger-Themen 2
F File lesen, ändern und abspeichern! Java Basics - Anfänger-Themen 2
N Datei aus Jar Archiv abspeichern Java Basics - Anfänger-Themen 2
K Grafik abspeichern, X11 Fehlermeldung Java Basics - Anfänger-Themen 15
A Objekt in Datei abspeichern Java Basics - Anfänger-Themen 8
C SWT Button in Variable abspeichern Java Basics - Anfänger-Themen 5
saxman Unicode aus Textdatei einlesen und wieder abspeichern Java Basics - Anfänger-Themen 13
R fensterinhalt als bild und ganzen programmstatus abspeichern Java Basics - Anfänger-Themen 2
G Abspeichern von Daten in Array oder ähnlichem Java Basics - Anfänger-Themen 3
T Hashmap abspeichern und einlesen Java Basics - Anfänger-Themen 2
G Abspeichern und einlesen Java Basics - Anfänger-Themen 6
J Bild der Zwischenablage abspeichern Java Basics - Anfänger-Themen 7
S Bild vom Internet lokal abspeichern Java Basics - Anfänger-Themen 4
G intern abspeichern? Java Basics - Anfänger-Themen 4
C .tiff Dateien laden, bearbeiten(Werte einfügen),abspeichern Java Basics - Anfänger-Themen 11
K Arrays abspeichern bzw. abfragen Java Basics - Anfänger-Themen 8
T Bilddatei aus Internet abspeichern Java Basics - Anfänger-Themen 3
D Allgemeine Objekte abspeichern Java Basics - Anfänger-Themen 9
S abspeichern von text Java Basics - Anfänger-Themen 21
M Ausgabe einer ArrayList ensteht nur als Hashcode, nicht als Objekt Java Basics - Anfänger-Themen 16
D 2 ArrayListen gleich sortieren bzw. eine Liste anhand einer anderen Sortieren Java Basics - Anfänger-Themen 6
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
E Arrays in einer ArrayList miteinander vergleichen Java Basics - Anfänger-Themen 12
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
D remove Object von einer Liste von Obejcts Java Basics - Anfänger-Themen 3
FunkyPhil94 Wert in einer Lambda Funktion erhöhen Java Basics - Anfänger-Themen 3
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
A Daten aus einer HashMap aus einer DB speichern und mit neuen Werten vergleichen Java Basics - Anfänger-Themen 8
P Welches SDK für das erstellen einer ausführbaren Datei? Java Basics - Anfänger-Themen 4
D Länge einer Liste aufrufen. Java Basics - Anfänger-Themen 19
J Klassen Instanzen einer Klasse in einer anderen unabhängigen Klasse nutzen Java Basics - Anfänger-Themen 4
B Alle Strings bis zu einer Maimallänge aufzählen, die Bedingung erfüllen Java Basics - Anfänger-Themen 13
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
Soranix Erste Schritte Struktur als Anfänger // Von einer Klasse auf ein Objekt einer anderen Klasse zugreifen. Java Basics - Anfänger-Themen 6
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben