2009-08-07 5 views
0

Ich versuche, ein Video in meiner Java-Anwendung mit JMF zu spielen. Das Video läuft gut, aber ich versuche, das Video größer zu machen. Der folgende Code wird in ein anderes Jpanel mit einem Gridbag-Layout eingefügt.Größe ändern Video mit JMF

Ich habe es derzeit hinzugefügt, ohne FILL-Einschränkung, so dass es in seiner normalen Größe angezeigt werden sollte.

Wenn ich eine Füllungsbedingung hinzufüge, dehnt es das Video, das das Seitenverhältnis schief nimmt.

Ich denke, im fragen, ob jemand weiß, wie man ein Video manuell oder die Größe, wie das Seitenverhältnis zu sperren

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

Hat jemand das gelöst? Ich kann einfach kein Video über JMF abspielen (tatsächlich verwende ich http://fmj-sf.net/, aber die API ist genau das gleiche). – petersaints

Antwort

2

Sie einfach die Video-Komponente in einem anderen Behälter Tafel werfen möchten und Kontrolliere die Größe aus dem Container. In meiner App habe ich die Videokomponente in einem JFrame und um die Größe des Videos anzupassen, ändere ich einfach meine Größe.