0

LinuxでWebカメラにアクセスできるv4lvjライブラリのチュートリアルに従っています。ソースへのリンク基本的にウェブカメラのビデオ フィードを表示するサンプル プログラムを作成しました。プログラムが説明したとおりにすべてが機能します。ビデオフィードの上に緑の線を追加してプログラムを変更しようとすると、問題が発生します。同じ方法でグラフィックをつかみ、線の色を設定してから線を引きます。

@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();
        }

ただし、これを行うと、「JVM がこのイメージをデコードできないようです。サポートされているイメージ タイプ: BMP bmp jpg JPG...」という例外が表示されます。

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

だれか理由を教えてください。ビデオ フィードの上に線を引くのを手伝ってくれませんか。ありがとうございました。

4

1 に答える 1

0

paint(Graphics g)のメソッドをオーバーライドしてペイントをJLabel行い、キャストしてペイントGraphics2D g2d = (Graphics2D) g;に使用する必要がありますGraphics2D

コードで JLabel を使用する方法は正しくありません。

BufferedImageフレームから受け取ったものを使用して、それらを取得しGraphicsて描画することもできます

于 2013-03-17T10:03:28.900 に答える