Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JMF调整视频大小_Java_Jmf - Fatal编程技术网

Java 使用JMF调整视频大小

Java 使用JMF调整视频大小,java,jmf,Java,Jmf,我正在尝试使用JMF在java应用程序中播放视频。视频播放得很好,但我正在尝试将视频放大。下面的代码放在另一个带有gridbag布局的jpanel中 我目前有它被添加没有填充约束,所以它应该显示在其正常大小 当我添加填充约束时,它会拉伸视频,使纵横比倾斜 我猜我在问是否有人知道如何手动调整视频大小或如何锁定纵横比 public class VideoPanel extends JPanel{ private Player mediaPlayer; private File file; publ

我正在尝试使用JMF在java应用程序中播放视频。视频播放得很好,但我正在尝试将视频放大。下面的代码放在另一个带有gridbag布局的jpanel中

我目前有它被添加没有填充约束,所以它应该显示在其正常大小

当我添加填充约束时,它会拉伸视频,使纵横比倾斜

我猜我在问是否有人知道如何手动调整视频大小或如何锁定纵横比

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();
}

}

您可能只想将视频组件扔到另一个容器面板中,并从容器中控制大小。在我的应用程序中,我将视频组件设置在JFrame中,要调整视频大小,我只需调整容器大小。

有人解决了这个问题吗?我就是无法通过JMF播放视频(事实上我正在使用,但API完全相同)。