2011-05-17 47 views
0

任务是制作一个jlabel在videocanvas上运行。 JLabel应该是透明的,没有任何背景。通过JMF绘制JLabel

我在这里找到了答案: Painting over JMF component 它至少可以在我的摄像头上正常工作。但是,当我尝试用通常的录像档案替换源我开始体验到一个问题:

http://clip2net.com/clip/m25721/1305648619-clip-6kb.png

视频仍然起着很好的(奇怪的 - 但我不能捕获视频 - 这是黑色的屏幕上,但在现实中仍然很好),但背景出现在我的JLabel下。它的格式为:176 * 144(4:3),MPG1 = MPEG 1(VCD)。

我打开另一个旧视频160 * 120(4:3),IV41 = Intel Indeo R4.1。嗯 - 我做了一个屏幕,它工作正常 - 我们没有预期的背景。

http://clip2net.com/clip/m25721/1305649256-clip-50kb.jpg

我尝试更多 - 并且得到了积极的结果没有背景IV50 =英特尔的Indeo R5.1,IV32 =英特尔的Indeo R3.2,IV41 =英特尔的Indeo R4.1和... DIVX = OpenDivx v4。所有常见的mpeg播放不好(在JLabel下有灰色背景)。

也许有另一种方法可以在视频上绘制jlabel吗?或者这种方法可以修复 - 请帮助。

我刚添加的JLabel到上面的代码那样:

JLabel jl = new JLabel(); 
jl.setText("This is my JLabel that will cross the videoframe"); 
jl.setBounds(50,50,300,50); 
jLP.add(jl, 0); 

回答

0

尝试画JLabelBufferedImage,因为我在这个LabelRenderTest.java source做。然后在视频上绘制图像。

然后可以在任何需要看到图像的位置绘制图像。将其缓存并在每帧的不同位置绘制以模拟文本滚动。

+0

为每个视频帧重新创建缓冲图像是一个好主意吗?文本会移动 - 所以我需要重新创建一个双缓冲图像。 – Malex 2011-05-18 00:54:37

+0

@Malex:“文字会移动 - 所以我需要重新创建一个双缓冲图像。”当然不是!看到我的答案编辑。在链接的源代码中,JLabel的图像在位置20,20处被称为“bi”。将它作为类属性并随时随地绘制。 – 2011-05-18 01:33:26

+0

不是。它根本不起作用。我仍然有矩形阴影。也许我应该尝试使用图像 - 不是jlabel?如果需要,我可以发布整个代码。 – Malex 2011-05-22 19:19:40