【发布时间】:2017-06-14 21:07:16
【问题描述】:
我已使用com.github.sarxos.webcam 将网络摄像头添加到我的软件中。它有一个名为WebcamPanel 的JPanel,并且有预定义的网络摄像头尺寸,而我需要自定义尺寸的图片。我设法在640 x 480 裁剪了从网络摄像头拍摄的图像。我想在WebcamPanel 上放置一个红色矩形,以表明这部分图像将被保存。
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 保持在它的位置,而它顶部的矩形在中心。请提出解决此问题的有效方法。谢谢!
【问题讨论】:
-
查看 How to Decorate Compoents 上的 Swing 教程部分,了解一种方法。
标签: java swing graphics jpanel awt