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