摄像头编程
一、要点
1.CCamera类---提供操作摄像头的各种API.
调用CCamera::NewL()静态函数创建一个摄像头对象,函数原型:
static CCamera::NewL(MCameraObserver& aObserver,TInt aCameraIndex);
第一各参数时侦听类对象,第二个时摄像头设备的编号。
创建了摄像头对象后,应该调用它的Reserve()保留摄像头。
2.MCameraObserver---侦听接口类
class MCameraObserver
{
public:
virtual void ReseverComplete(TInt aError)=0;
virtual void PowerOnComplete(TInt aError)=0;
virtual void ViewFinderFrameReady(CFbsBitmao& aFrame)=0;
virtual void ImageReady(CFbsBitmao* aBitmap,HBufC8* aData,TInt
aError)=0;
}
二、步骤
1.创建和初始化
(1)声明observer
class CImageCapturerEngine : public CBase, public MCameraObserver
{
public: // Observer interface
class MObserver
{
public:
virtual void OnFrame(const CFbsBitmap& aFrame)=0;
virtual void OnImage(CFbsBitmap* aBitmap)=0;
virtual void OnError(TInt aError)=0;
};
public: // Static constants
static const TInt KDefaultImageWidth;
static const TInt KDefaultImageHeight;
static const CCamera::TFormat KDefaultImageFormat;
static const TInt KDefaultImageIndex;
public: // Constructors and destructor
/**
* Two-phased constructor.
*/
static CImageCapturerEngine* NewL(MObserver& aObserver);
/**
* Destructor.
*/
~CImageCapturerEngine();
private:
/**
* EPOC default constructor.
*/
CImageCapturerEngine(MObserver& aObserver);
void ConstructL();
public: // Functions from MCameraObserver
/**
* Indicates camera reservation is complete.
* Called asynchronously when CCamera::Reserve() completes.
* @param aError: An error on failure and KErrNone on success
*/
void ReserveComplete(TInt aError);
/**
* Indicates camera power on is complete.
* Called on completion of CCamera:PowerOn().
* @param aError: An error on failure and KErrNone on success
*/
void PowerOnComplete(TInt aError);
/**
* Called periodically in response to the use of
* CCamera::StartViewFinderBitmapsL().
* @param aFrame: A view finder frame
*/
void ViewFinderFrameReady(CFbsBitmap& aFrame);
/**
* Called asynchronously when CCamera::CaptureImage() completes.
* Transfers the current image from the camera to the client.
* @param aBitmap: An image held in CFbsBitmap form if this
was the
* format specified in CCamera::PrepareImageCaptureL().
* @param aData: a pointer to an HBufC8 if this was the format
* specified in CCamera::PrepareImageCaptureL().
* @param aError KErrNone on success or an error code on failure
*/
void ImageReady(CFbsBitmap* aBitmap,HBufC8* aData,TInt aError);
/**
* Called asynchronously when a buffer has been filled with
the
* required number of video frames by CCamera::StartVideoCapture().
* Passes a filled frame buffer to the client.
* @param aFrameBuffer: A pointer to an MFrameBuffer if successful,
or
* NULL if not successful.
* @param aError: KErrNone on success or an error code on failure
*/
void FrameBufferReady(MFrameBuffer* aFrameBuffer,TInt aError);
public: // new public methods
/**
* Start the view finder
*/
void StartViewFinderL();
/**
* Stop the view finder
*/
void StopViewFinder();
/**
* Asynchronously performs still image capture.
* Calls MCameraObserver::ImageReady() when complete.
*/
void CaptureImage();
private: // new private methods
/**
* Performs setup and allocation of memory.
* Called prior to calling CaptureImage() to keep the latency
of that
* function to a minimum. Needs to be called only once for
multiple
* CaptureImage() calls.
* May leave with KErrNotSupported or KErrNoMemory
* @param aImageFormat: The image format, must be one of the
formats
* supported (see TCameraInfo::iImageFormatsSupported)
*/
void PrepareImageCaptureL(CCamera::TFormat aImageFormat);
private: // member variables
/**
*
*/
MObserver& iObserver;
/**
* The camera object
*/
CCamera* iCamera;
/**
* The resolution of the captured image.
*/
TSize iSize;
};
#endif
完整版本请见http://www.morning-sea.com.cn
曙海教育
曙海嵌入式
(MTK培训,Android培训,FPGA培训,DSP培训,iPhone培训,Symbian培训)
上海总部电话:021-51875830 深圳:4008699035 北京:010-51292078
网址:http://www.51qianru.cn
版权所有-曙海教育 转发请注明出处
|