2017-01-02 290 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