Mangiare Senza Glutine disponibile su App Store

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 = cameratest
TEMPLATE = app
 
 
SOURCES += main.cpp\
        mainwindow.cpp
 
HEADERS  += 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>
#endif
 
namespace 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 Complete
        qDebug()<<"Reserve Complete";
        iCamera->PowerOn();
    }
 
    if (aEvent.iEventType == KUidECamEventPowerOnComplete)
    {
        //PowerOn Complete
        qDebug()<<"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();
}