Per altre informazioni scrivi a fabriziocaldarelli@negusweb.it
Usare la Camera su Symbian Qt 4.6
Da Programmazione Software.
Qt 4.6, in concomitanza con le QtMobility 1.0.2, non dispone di un oggetto per l'utilizzo della fotocamera (per la cattura dei singoli fotogrammi).
A tal proposito è quindi necessario ricorrere al buon vecchio Symbian C++, un pò più a basso livello, attraverso la CCamera Api.
Di seguito il codice sufficiente ad utilizzare la camera (minimale).
Ricordasi di :
Aggiungere la capability UserEnvironment Linkare le librerie ecam.lib (per l'uso della camera) e fbscli.lib (per il passaggio delle immagini);
Tutto il codice è scaricabile da: CameraTest Symbian Qt 4.6
CameraTest.pro
#-------------------------------------------------## Project created by QtCreator 2010-12-28T15:23:16##-------------------------------------------------QT += core gui
TARGET = cameratestTEMPLATE = appSOURCES += main.cpp\
mainwindow.cppHEADERS += mainwindow.h
FORMS += mainwindow.ui
CONFIG += mobility
MOBILITY =symbian {TARGET.UID3 = 0xe54fbdb9
TARGET.CAPABILITY += UserEnvironment
TARGET.EPOCSTACKSIZE = 0x14000
TARGET.EPOCHEAPSIZE = 0x020000 0x800000
LIBS += -lecam -lfbscli
}debug {MMP_RULES -= PAGED
MMP_RULES += UNPAGED
}
MainWindow.h
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QLabel>#ifdef Q_WS_S60#include <ecam.h>#include <fbs.h>#endifnamespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow, public MCameraObserver2
{Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
void HandleEvent(const TECAMEvent& aEvent);
void ViewFinderReady(MCameraBuffer& aCameraBuffer,TInt aError);
void ImageBufferReady(MCameraBuffer& aCameraBuffer,TInt aError);
void VideoBufferReady(MCameraBuffer& aCameraBuffer,TInt aError);
void UseCamera();
private:
Ui::MainWindow *ui;
CCamera *iCamera;
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QDebug>MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{ui->setupUi(this);
this->UseCamera();
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::HandleEvent(const TECAMEvent& aEvent)
{qDebug()<< "HandleEvent";
if (aEvent.iEventType == KUidECamEventReserveComplete)
{//Reserve CompleteqDebug()<<"Reserve Complete";
iCamera->PowerOn();
}if (aEvent.iEventType == KUidECamEventPowerOnComplete)
{//PowerOn CompleteqDebug()<<"PowerOn complete";
TSize sz(360,270);
iCamera->StartViewFinderBitmapsL(sz);
}}void MainWindow::ViewFinderReady(MCameraBuffer& aCameraBuffer,TInt aError)
{qDebug() << "ViewFinderReady";
if (this->isVisible())
{CFbsBitmap bmp;bmp.Duplicate(aCameraBuffer.BitmapL(0).Handle());
QPixmap pxm = QPixmap::fromSymbianCFbsBitmap(&bmp);
ui->lblPreview->setPixmap(pxm);
}aCameraBuffer.Release();
}void MainWindow::ImageBufferReady(MCameraBuffer& aCameraBuffer,TInt aError)
{qDebug() << "ImageBufferReady";
}void MainWindow::VideoBufferReady(MCameraBuffer& aCameraBuffer,TInt aError)
{qDebug() << "VideoBufferReady";
aCameraBuffer.Release();
}void MainWindow::UseCamera()
{this->iCamera = CCamera::New2L(*this, 0, 0);
this->iCamera->Reserve();
}

