Изменение размера видео с помощью JMF

Я пытаюсь воспроизвести видео в своем Java-приложении с помощью JMF. Видео воспроизводится нормально, но я пытаюсь сделать видео больше. приведенный ниже код размещается внутри другой панели jpanel с макетом gridbag.

В настоящее время я добавляю его без ограничений 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();
}

}


person Brandon    schedule 07.08.2009    source источник
comment
Кто-нибудь решил это? Я просто не могу воспроизвести видео через JMF (на самом деле я использую fmj-sf.net но API точно такой же).   -  person petersaints    schedule 03.11.2011


Ответы (1)


Вы можете просто поместить компонент видео в другую панель контейнера и управлять размером из контейнера. В моем приложении у меня есть компонент видео, установленный в JFrame, и для изменения размера видео я просто изменяю размер своего контейнера.

person thedude19    schedule 07.08.2009