2012-09-05 5 views
0

리눅스의 웹캠에 액세스 할 수있는 v4lvj 라이브러리에 관한 자습서를 읽고 있습니다. link to source 기본적으로 웹캠의 비디오 피드를 표시하는 예제 프로그램을 작성했습니다. 모든 것은 프로그램에서 설명한대로 작동합니다. 문제는 비디오 피드의 녹색 라인 온탑을 추가하여 프로그램을 변경하려고 할 때 발생합니다. 나는 그래픽을 같은 방식으로 잡고 라인 색을 설정 한 다음 선을 그립니다. 다음v4lvj 웹캠 이미지 상단에 선 그리기

javax.imageio.IIOException: Unsupported marker type 0x5a 
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method) 
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1176) 
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:984) 
    at javax.imageio.ImageIO.read(ImageIO.java:1438) 
    at javax.imageio.ImageIO.read(ImageIO.java:1342) 
    at au.edu.jcu.v4l4j.JPEGVideoFrame.refreshBufferedImage(Unknown Source) 
    at au.edu.jcu.v4l4j.BaseVideoFrame.getBufferedImage(Unknown Source) 
    at SimpleViewer.nextFrame(SimpleViewer.java:143) 
    at au.edu.jcu.v4l4j.PushSource.run(Unknown Source) 
    at java.lang.Thread.run(Thread.java:679) 
au.edu.jcu.v4l4j.exceptions.V4L4JException: Exception received while grabbing next frame 
    at au.edu.jcu.v4l4j.PushSource.run(Unknown Source) 
    at java.lang.Thread.run(Thread.java:679) 
Caused by: au.edu.jcu.v4l4j.exceptions.UnsupportedMethod: Unable to decode the image 
    at au.edu.jcu.v4l4j.JPEGVideoFrame.refreshBufferedImage(Unknown Source) 
    at au.edu.jcu.v4l4j.BaseVideoFrame.getBufferedImage(Unknown Source) 
    at SimpleViewer.nextFrame(SimpleViewer.java:143) 
    ... 2 more 
Caused by: javax.imageio.IIOException: Unsupported marker type 0x5a 
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method) 
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1176) 
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:984) 
    at javax.imageio.ImageIO.read(ImageIO.java:1438) 
    at javax.imageio.ImageIO.read(ImageIO.java:1342) 
    ... 5 more 
: 그래도, 내가 앞에 몇 가지 예외를 얻을 수행 할 때

@Override 
     public void nextFrame(VideoFrame frame) { 
       // This method is called when a new frame is ready. 
       // Don't forget to recycle it when done dealing with the frame. 

       // draw the new frame onto the JLabel 
       label.getGraphics().drawImage(frame.getBufferedImage(), 0, 0, width, height, null); 
       label.getGraphics().setColor(Color.GREEN); //this line causes exceptions 
       label.getGraphics().drawLine(0, 0, 640, 480); //this line causes exceptions 

       // recycle the frame 
       frame.recycle(); 
     } 

는 "... BMP BMP의 도트 JPG JPG. 당신의 JVM이 이미지 지원되는 이미지 형식을 디코딩 할 수없는 것 같다"

아무에게도 그 이유를 말해 줄 수 없으며 비디오 피드의 온라인 온 라인을 그릴 수 있습니다. 고맙습니다.

+0

을 그리는 프로그램은 내가 분리 될 때까지 같은 방법으로 종료 계속됩니다 그런 다음 웹 카메라를 다시 연결하십시오. – Matthew

+0

이 문제를 해결 했습니까? –

+0

나는 잠시 후에 그것을 보지 않았다. – Matthew

답변

0

그런 다음 캐스트 Graphics2D g2d = (Graphics2D) g;JLabelpaint(Graphics g) 방법, 을 무시하여 그림을 그리고 그림에 대한 Graphics2D를 사용해야합니다.

코드에서 JLabel을 사용하는 것은 잘못된 방법입니다.

당신은 프레임에서 수신 BufferedImage도 사용할 수 있습니다, 자신의 Graphics을 얻고 나는 그 두 줄을 제거하더라도, 그 위에 거기에