Schwieriges Problem mit Fonts

Hi,

vielleicht hat jemand eine Idee zu folgendem Problem:
Ich moechte einen Text in Java animieren. Der Text soll 5 Sekunden lang zum Betrachter herauszoomen. Das Problem ist, dass die Animation echt uebel aussieht, wenn ich einfach schrittweise den Font Size um 1 erhoehe. Ich habe es auch mit der Methode deriveFont(float size) versucht, wo man feinere Werte einstellen kann. Aber es ist alles sehr rucklig und langsam und das kann es nicht sein. Die Abstufungen zum naechsten Font Size sind einfach zu gross. Gibt es da irgendeine andere Moeglichkeit oder stoesst dort Java an seine Grenzen ?

Danke vielmals fuer Hilfe.

MfG,

Tristan.

PS: Bis jetzt habe ich noch keine zufriedenstellende Animation im Web gefunden. Die meisten machen ein ganz schnelles Zooming, um das Ruckeln zu verdecken.

Der Text soll 5
Sekunden lang zum Betrachter herauszoomen.

Du meinst „zum Betrachter heranzoomen“, d.h. der Text soll immer grösser werden?

Das Problem ist,
dass die Animation echt uebel aussieht, wenn ich einfach
schrittweise den Font Size um 1 erhoehe. Ich habe es auch mit
der Methode deriveFont(float size) versucht, wo man feinere
Werte einstellen kann. Aber es ist alles sehr rucklig und
langsam

Grundidee: Zeichne den Text relativ gross auf ein off-screen-image und skaliere dieses mit Graphics.drawImage() herunter (schrumpfe es). Alternativ kannst Du auch alle Bilder Deines Films vorher berechnen und in einem Image[] ablegen. Hier ein Q&D Beispiel das 10 Bilder des Films berechnet und sie einfach in einer Reihe auf ein JFrame zeichnet:

import java.awt.\*;
import java.awt.image.\*;
import javax.swing.\*;


public class ZoomFont extends JFrame {

 private Image[] myImages = new Image[10];

 public ZoomFont() {
 super("Zooming fonts");
 setSize(160, 600);
 setLocationRelativeTo(null);
 setDefaultCloseOperation(JFrame.EXIT\_ON\_CLOSE);
 setVisible(true);
 }

 public void createImages() {
 Image img = super.createImage(300, 100);
 Graphics g = img.getGraphics();
 g.setFont(new Font("SansSerif", Font.BOLD, 100));
 g.drawString("Hallo", 10, 80);

 for (int i=0; i

Das Skalieren habe ich hier mit Image.getScaledInstance() gemacht. Man könnte wohl auch mit Graphics.scale() oder gleich mit den Transforms von Graphics2D arbeiten. Was etwas schwierig werden könnte, ist die einzelnen Bilder richtig zu zentrieren.



> Gibt es da  
> irgendeine andere Moeglichkeit oder stoesst dort Java an seine  
> Grenzen ?


Es ist einfach eine Frage des Aufwands. Wenn Du genug Zeit hast, kannst Du jedes Pixel Deines Films einzeln berechnen. Du musst Dich aber fragen, ob Du dann nicht besser etwas wie Flash/Photoshop/Movie Maker nimmst und in der Java Applikation nur noch das Video abspielst.

Gruss, Jörg


PS: Diese scheiss T-Online Werbung nervt...