我想从网络摄像头获取输入并在画布中绘制它。JavaFX画布不是绘制图像
为此,我写了下面的代码块:
void addImageToCanvas(Image img){
GraphicsContext gc = canvas.getGraphicsContext2D();
gc.drawImage(img, 0, 0, canvas.getWidth(), canvas.getHeight());
}
如果我通过只有一个形象用手该功能,它的工作原理。
如果我通过两个Image
s,那么它只绘制最后一个。
但我正在实现线程并从线程连续调用它。该功能然后是静止不动就行了:
gc.drawImage(img, 0, 0, canvas.getWidth(), canvas.getHeight());
的代码的方法被调用其中的一部分:
public void run() {
try {
FrameGrabber grabber = new VideoInputFrameGrabber(cameraId);
CvMemStorage storage = CvMemStorage.create();
grabber.start();
IplImage grabbedImage;
BufferedImage bufImg;
int counter = 0;
while (primaryCameraChosen != null) {
grabbedImage = grabber.grab();
bufImg = grabbedImage.getBufferedImage();
addImageToCanvas(SwingFXUtils.toFXImage(bufImg, null));
try{
Thread.sleep(10000);
} catch(InterruptedException e){}
}
grabber.stop();
grabber.release();
} catch (Exception ex) {
}
}
你能告诉我什么,我做错了什么?解决办法是什么?谢谢。
感谢您的回复。你误解了我的第一个问题。然后我也运行了一个线程,并在图像之间等待了10秒钟。这只是绘制的最后一张图片。它不应该画出第一张图片,然后等待(对于线程),然后再绘制第二张图片?而你的代码并没有解决我的问题,我试图实现它。你希望看到我的完整代码吗?如果是,那么我的电子邮件ID:bishwa420(at)gmail(dot)com。干杯。 –
我添加了更多用于检测错误或错误的代码。 –
我已经为你更新了答案。我几乎可以肯定,这导致了这个问题,两种方法都有效。具有听众的那个会更好,因为它可以确保图像始终得到调整。 – DVarga