com.github.sarxos.webcam
を使用して私のソフトウェアにウェブカメラを追加しました。それはWebcamPanel
という名前のJPanel
を持ち、私は自分のカスタムサイズの写真が必要ですが、あらかじめ定義されたウェブカメラのサイズを持っています。私は640 x 480
でウェブカメラから撮影した画像を切り取ることができました。画像のこの部分が保存されることを示すために、WebcamPanel
の上に赤い四角形を付けたいと思います。透明なJPanelを不透明なJPanelに重ねる方法は?
public class CardPanel {
Dimension panelDim = new Dimension(640, 480);
public Cardpanel(){
//....Button Defined earlier
btnTakePhoto.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
webcameFrame();
}
});
}
private void webcamFrame(){
imageFrame = new JFrame("Photo Capture");
// Did some calculations to put window at center
imageFrame.setBounds(screenSize.width/2 - frameWidth/2, screenSize.height/2 - frameHeight/2, frameWidth,
frameHeight);
imageFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
imageFrame.setContentPane(contentPane);
JPanel webcamWindow = new JPanel();
RedHighlighter redHighlighter = new RedHighlighter();
Webcam webcam = Webcam.getDefault();
webcam.setViewSize(WebcamResolution.VGA.getSize());
webcamPanel = new WebcamPanel(webcam);
webcamPanel.setFillArea(true);
webcamPanel.setMirrored(false);
webcamPanel.setPreferredSize(panelDim);
webcamWindow.add(webcamPanel);
webcamWindow.add(redHighlighter);
hBox.add(webcamWindow);
}
// Sub Class just for drawing the rectangle
public class RedHighlighter extends JPanel{
public RedHighlighter() {
// If you delete the following line, nothing will appear
setPreferredSize(new Dimension(400, 400));
}
@Override
public void paint(Graphics g) {
g.setColor(Color.RED);
g.drawRect(100, 100, 200, 200);
}
}
}
私はJLayeredPanes
を使用しますがあなたが何でそれが全体の大きさをカバーしていないし、一度に一つの項目が表示されます。
paint
メソッドをオーバーライドすると、四角形を描画するのに役立ちましたが、それは側面にあり、上にはありません。
あなたは長方形が左に向けたWebcamPanel
をプッシュしている見ることができるように。 webcamPanel
をその位置に残しておき、中央の四角形をその上に置きます。この問題に対する効率的なアプローチを提案してください。ありがとう!
これを行うための一つの方法のために(http://docs.oracle.com/javase/tutorial/uiswing/misc/jlayer.html)[Compoentsを飾る方法】上のSwingのチュートリアルからのセクションをチェックアウト。 – camickr