2009-08-07 10 views
0

JMFを使用してJavaアプリケーションでビデオを再生しようとしています。動画はうまく再生されていますが、動画を大きくするようにしています。以下のコードはグリッドバッグレイアウトを持つ別のjpanelの中​​に配置されています。JMFでビデオのサイズを変更

私は現在FILL制約なしで追加されていますので、通常のサイズで表示する必要があります。

フィル制約を追加すると、アスペクト比を歪ませてビデオが伸びます。

私は、誰もが手動でビデオのサイズを変更する方法を知っているか、縦横比をロックする方法ならばイムが求めて推測

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

誰でもこれを解決しましたか?私はちょうどJMFを通してビデオを再生することはできません(実際に私はhttp://fmj-sf.net/を使用していますが、APIはまったく同じです)。 – petersaints

答えて

2

あなただけの別の容器パネルでビデオコンポーネントをスローすることもできますし、コンテナからサイズを制御します。私のアプリでは、ビデオコンポーネントをJFrameに設定し、ビデオのサイズを変更するためにコンテナのサイズを変更するだけです。