在透明的jwindows中播放argb.mov视频

2guxujil  于 2021-06-27  发布在  Java
关注(0)|答案(0)|浏览(279)

我正试图为我的程序编写一个启动屏幕,因为它需要很长时间才能打开。
我设法用一个图像,但我不知道如何用argb视频。
首先,我尝试了一个图像:(在jwindow扩展类上)

JLabel l = new JLabel("");
JPanel p = new JPanel();

setSize(1024, 1024);
setBackground(new Color(0, 0, 0, 0));
setLocationRelativeTo(null);

l.setBounds(0, 0, 1024, 1024);
l.setIcon(new ImageIcon(ImageIO.read(getClass().getResourceAsStream("/" + splashName))));

p.setBounds(0, 0, 1024, 1024);
p.setBackground(new Color(0, 0, 0, 0));
p.add(l);

add(p);
setVisible(true);

原始splash图像:example.png
执行代码时的屏幕截图:screenshot.png
它工作得很好。
之后,我制作了带有后效的闪屏动画(同样的闪屏图像旋转)。是的,我肯定导出了rgb+alpha和ffmpeg格式的.mov视频。
所以,我尝试了使用javacv库 FFmpegFrameGrabber.grabImage(); 但结果很奇怪(我知道代码不是很好,但我首先想让它工作)

JLabel l = new JLabel("");
JPanel p = new JPanel();

grabber = new FFmpegFrameGrabber(splashPath);

setSize(1024, 1024);
setLocationRelativeTo(null);

p.setBackground(new Color(0, 0, 0, 0));
p.setBounds(0, 0, 1024, 1024);

l.setIcon(new ImageIcon(ImageIO.read(getClass().getResourceAsStream("/icon4.png"))));
l.setBounds(0, 0, 1024, 1024);

p.add(l);

add(p);

grabber.start();

Frame frame;
BufferedImage bi = new BufferedImage(grabber.getImageWidth(), grabber.getImageHeight(), BufferedImage.TYPE_INT_ARGB);

while((frame = grabber.grabImage()) != null) {
    bi = new BufferedImage(grabber.getImageWidth(), grabber.getImageHeight(), BufferedImage.TYPE_INT_ARGB);
    Java2DFrameConverter.copy(frame, bi);
    showFrame(bi);
    Thread.sleep(16);
}
grabber.stop();

private void showFrame(BufferedImage frame) {
    p.removeAll();
    l.setIcon(new ImageIcon(frame));
    p.add(l);
    repaint();
}

执行代码时的屏幕截图:screenshot2.png
从截图中,我们可以看到,视频的大小(较宽)和有一些奇怪的透明蓝线是其他颜色应该是。
所以我的问题是:
我该怎么修?
javacv是问题所在吗?
在java中,有没有其他方法可以播放透明视频作为启动屏幕?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题