Qt C++ video4linux kamera képe

 ( makgab | 2014. október 25., szombat - 23:15 )

Üdv!

A kiindulás ebből az app-ból van, ami v4l-ot használ.
A "Start Capture" gombra indul a capture. A "Stop Capture" esetén megáll a capturing és a formon ott marad az utolsó képkocka.
Ezt a képet (képkockát) szeretném elmenteni fájlba (jpg,png mindegy).

Van ötlete valakinek, hogy merre induljak el?

--
G.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Ezzel próbálkozom... van egy
videovidget.cpp:

#include "videowidget.h"

videowidget::videowidget(QWidget *parent) :
QWidget(parent)
{
setAutoFillBackground(true);
}

void videowidget::paintEvent(QPaintEvent *event) {
try{
QPainter painter(this);

if(!img.isNull()){
painter.drawImage(QPoint(0,0), img);
}
}catch(...){}
}

videowidget.h:

#ifndef VIDEOWIDGET_H
#define VIDEOWIDGET_H

#include < QWidget >
#include < QPainter >

class videowidget : public QWidget
{
Q_OBJECT
public:
explicit videowidget(QWidget *parent = 0);
QImage img;

protected:
void paintEvent(QPaintEvent *event);

signals:

public slots:

};

#endif // VIDEOWIDGET_H

A mainwindow.cpp-ban van egy onStopCapture(), ami tökéletes lenne:

#include "mainwindow.h"
#include < QString >
#include < QImage >
...
void MainWindow::onStopCapture()
{
t->devam=false;
//QImage img;
QString savepath = "/path/to/pic1.png";
QByteArray ba;
QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);
video->img.save(&buffer, &savepath, "PNG");
}

Erre azt mondja a fordító:

mainwindow.cpp:79: error: no matching function for call to 'QImage::save(QBuffer*, QString*, const char [4])'
video->img.save(&buffer, &savepath, "PNG");
--------------------------------------------------------------------^

Mit rontottam el?

--
G.

http://qt-project.org/doc/qt-4.8/qimage.html

[ a save ugy nem lesz jo... ]

A savepath nélkül lefordul, de milyen néven menti ilyenkor?

--
G.

Kéne egy kicsit képezned magad C-ből/C++-ból. Miért csinálsz pl. mutatót a savepath-ból?
Miért nem értelmezed a hibaüzenetet?

A mutatók kicsit megkevernek néha... :) Fejlesztem magam, ahogy tudom.
De elnézést kérek, mert elnéztem:

QString savepath = "/path/to/pic1.png";
video->img.save(savepath, "PNG", -1);

Kevertem a két fv-t:
bool QImage::save ( const QString & fileName, const char * format = 0, int quality = -1 ) const
bool QImage::save ( QIODevice * device, const char * format = 0, int quality = -1 ) const

--
G.

Qt nem használ exception-öket, sőt újabban kikapcsolt exception-ökkel is fordítják, szóval azt a try-catch-t törölheted nyugodtan...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

Kivételkezelés nélkül..? :o

--
G.

Igen, anélkül. Az is lehet, hogy már a qmake is -fno-exceptions kapcsolóval fordít, de erre nem vennék mérget...

Mindenesetre Qt kód nem fog neked exception-nal hibát jelezni, és ha a te kódod dobja, akkor is nagy az esély rá, hogy összecsinálja magát. (A signal-slot illetve az event system deklaráltan nem exception safe.)

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o