2009-08-07 14 views
0

En essayant de lire une vidéo dans mon application Java en utilisant JMF. La vidéo fonctionne bien, mais j'essaie d'agrandir la vidéo. le code ci-dessous est placé à l'intérieur d'un autre jpanel avec une mise en page gridbag.Redimensionner la vidéo avec JMF

Je l'ai actuellement ajouté sans contrainte FILL donc il devrait afficher à sa taille normale. Lorsque j'ajoute une contrainte de remplissage, cela étire la vidéo en modifiant le format d'image.

Je suppose im demander si quelqu'un sait comment redimensionner manuellement une vidéo ou comment verrouiller le rapport d'aspect

public class VideoPanel extends JPanel{ 
private Player mediaPlayer; 
private File file; 

public VideoPanel(String videoFile, String path){ 
    setOpaque(false); 
    file = new File(path+"/video/"+videoFile); 

    URL mediaURL = null; 
    try { 
     mediaURL = file.toURI().toURL(); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } 
    setLayout(new BorderLayout());  
    Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, true); 
    try{ 
     mediaPlayer = Manager.createRealizedPlayer(mediaURL); 
     Component video = mediaPlayer.getVisualComponent(); 
     Component controls = mediaPlayer.getControlPanelComponent(); 

     double scale = getScale(this.getWidth(),this.getHeight(),video.getWidth(),video.getHeight()); 

     video.setPreferredSize(new Dimension((int)scale*video.getWidth(),(int)scale*video.getHeight())); 



     if(video != null) 
      add(video,BorderLayout.CENTER); 
     if(controls != null) 
      add(controls,BorderLayout.SOUTH); 
    } 
    catch (NoPlayerException noPlayerException){ 
     System.err.println("No media player found"); 
    } 
    catch (CannotRealizeException cannotRealizeException){ 
     System.err.println("Could not realize media player"); 
    } 
    catch (IOException iOException){ 
     System.err.println("Error reading from the source"); 
    } 
} 

private double getScale(int panelWidth, int panelHeight, int imageWidth, int imageHeight) { 
    double scale = 1; 
    double xScale; 
    double yScale; 

    xScale = (double) panelWidth/imageWidth; 
    yScale = (double) panelHeight/imageHeight; 
    scale = Math.min(xScale, yScale); 
    return scale; 
} 

public void stopPlay(){  
    mediaPlayer.stop(); 
} 

}

+0

Est-ce que quelqu'un a résolu cela? Je n'arrive pas à lire une vidéo via JMF (en fait j'utilise http://fmj-sf.net/ mais l'API est exactement la même). – petersaints

Répondre

2

Vous pouvez juste vouloir jeter le composant vidéo dans un autre panneau de conteneur et contrôler la taille du conteneur. Dans mon application, j'ai le jeu de composants vidéo dans un JFrame et pour redimensionner la vidéo, je redimensionne simplement mon conteneur.