2017-01-02 116 views
-1

因此,我制作了一个stopmotion应用程序 - 来自我的摄像头的实时馈送位于JLayeredPane中顶层(第10层)内的JPanel(带有setOpaque(false)) - 基本上,当我拍摄一张照片时,我想将它添加到其中一个较低层,以便在屏幕上显示以前拍摄的照片。下面是我现在想要做的:将透明图像添加到JLayeredPane

编辑:这是我的代码基于下面的答案 - 这现在什么都不做,而不是像以前那样添加不透明的图像 - 如果我添加这个到一个JPanel,虽然和的JPanel添加到JLayeredPane的,然后我得到的是灰色

BufferedImage img2 = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB); 
Graphics2D g = img2.createGraphics(); 
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .5f));    

g.drawImage(img2, 0, 0, null); 
g.dispose(); 

ImageIcon imgIcon = new ImageIcon(new ImageIcon(img2).getImage().getScaledInstance(img2.getWidth(), img2.getHeight(), Image.SCALE_SMOOTH)); 
JLabel showPic = new JLabel(imgIcon); 
showPic.setSize(layers.getSize()); 
showPic.setBounds(layers.getX() + 18, layers.getY(), img2.getWidth(), img2.getHeight()); 

layers.add(showPic, new Integer(1)); //layers is my JLayeredPane 
layers.repaint(); 
layers.revalidate(); 

IMG是我刚刚从我的摄像头拍摄的画面,我试图使它半透明,然后将其添加到JLabel。我该如何做这项工作?还是有更好的方法来做到这一点?

回答

1

我不知道这是否会解决这个问题,但你正在寻找的图像是

BufferedImage img2 = new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_INT_ARGB); 

java.awt.Transparency.TRANSLUCENT具有3的值和对应于只BufferedImage.TYPE_INT_ARGB_PRE上帝知道它在做什么。

随着BufferedImage.TYPE_INT_ARGB你可以创建一个透明图像并应用复合材料等

您还需要纠正这种

g.drawImage(img2, null, 0, 0); 

g.drawImage(img2, 0, 0, null); 

-

继承人透明度如何适用于我:

我有两个图像BIM和bim2和我绘制为一个在另一个的顶部:

BufferedImage bim=null, bim2=null; 
try { 
    bim=ImageIO.read(new File("....")); 
    bim2=ImageIO.read(new File("....")); 
} 
catch (Exception ex) { System.err.println("error in bim "+ex); } 
int wc=bim.getWidth(), hc=bim.getHeight(); 

BufferedImage img2 = new BufferedImage(bim.getWidth(), bim.getHeight(), BufferedImage.TYPE_INT_ARGB); 
Graphics2D g = img2.createGraphics(); 
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, .5f));    

g.drawImage(bim, 0, 0, null); 
g.drawImage(bim2, 0, 0, wc, hc, null); 

然后,我可以在一个JPanel的JFrame或任何显示它。

我甚至可以创建标签:

JLabel showPic = new JLabel(new ImageIcon(img2)); 
JFrame f=new JFrame(); 
f.setSize(500, 500); 
f.add(showPic); 
f.setVisible(true); 
+0

明白了 - 只有现在,当我添加它,什么也不显示 - 除非我把它添加到一个JPanel,在这种情况下,(后我做panel.setBackground(新颜色(0,0,0,50))只有灰色显示在屏幕上。JLayeredPane无法使上层透明并看到下面的图层吗? – dgamz

+0

现在我注意到:您需要有另一个你不能在图像上画一个空的图像(img2) - 摄像头的图像是什么? – gpasch

+0

来自摄像头的图像被称为img - 虽然我不想修改它,因为我将它存储在某处否则完好无损 - 我想制作一份img副本,然后制作此副本nsparent – dgamz