⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testcameraapp.cpp

📁 Symbian UIQ的CameraTest.用于高端手机P800、P30、P31等。
💻 CPP
字号:
// TestCameraApp.cpp
//
// Copyright (c) 2002 Symbian Ltd.  All rights reserved.
//

#include <eikenv.h>
#include <TestCameraApp.rsg>
#include "TestCameraApp.h"
#include "TestCameraApp.hrh"

//
//  CTCamAppUi
//

void CTCamAppUi::ConstructL()
	{
	CEikAppUi::ConstructL();
	iAppView = new(ELeave) CTCamAppView;
	iAppView->ConstructL(ClientRect());
	AddToStackL(iAppView);
	RegisterViewL(*this);

	iCamera = CCamera::NewL(*this,0);
	}

CTCamAppUi::~CTCamAppUi()
	{
	iCamera->Release();
	delete iCamera;
	if (iAppView)
		{
		RemoveFromStack(iAppView);
		delete iAppView;
		}
	}

void CTCamAppUi::HandleCommandL(TInt aCommand)
	{
	switch (aCommand)
		{
	case ETCamCmdPowerOn:
		iCamera->PowerOn();
		break;
	case ETCamCmdPowerOff:
		iCamera->PowerOff();
		break;
	case ETCamCmdViewFinder:
		ViewFinderL();
		break;
	case ETCamCmdCaptureImage:
		CaptureImageL();
		break;
	case ETCamCmdCaptureVideo:
		CaptureVideoL();
		break;
	case ETCamCmdIncBrightness:
		iCamera->SetBrightnessL(iCamera->Brightness() + 10);
		break;
	case ETCamCmdIncContrast:
		iCamera->SetContrastL(iCamera->Contrast() + 10);
		break;
	case ETCamCmdDecBrightness:
		iCamera->SetBrightnessL(iCamera->Brightness() - 10);
		break;
	case ETCamCmdDecContrast:
		iCamera->SetContrastL(iCamera->Contrast() - 10);
		break;
	case ETCamCmdResetBrightness:
		iCamera->SetBrightnessL(0);
		break;
	case ETCamCmdResetContrast:
		iCamera->SetContrastL(0);
		break;
	case EEikCmdExit:
		Exit();
		break;
		}
	}

void CTCamAppUi::ViewFinderL()
	{
	TSize imageSize;

/// REMOVED by pawel.defee@chiralion.com on 18.07.2003
///	iCamera->EnumerateCaptureSizes(imageSize,0,CCamera::EFormatFbsBitmapColor16M);
/// ADDED by pawel.defee@chiralion.com on 18.07.2003
/// Corrects the color mode to 64K
	iCamera->EnumerateCaptureSizes(imageSize,0,CCamera::EFormatFbsBitmapColor64K);
/// END ADDED SECTION

/// REMOVED by pawel.defee@chiralion.com on 18.07.2003
///	const TPoint pos = iAppView->DrawBorders(imageSize);
/// ADDED by pawel.defee@chiralion.com on 18.07.2003
/// Corrects viewfinder position to be in the application area
/// This also fixes the "In Use" error
	const TPoint pos(20,180);
/// END ADDED SECTION

	TRect screenRect(pos,imageSize);
	TRect clipRect;

	if (!iCamera->ViewFinderActive())

/// REMOVED by pawel.defee@chiralion.com on 18.07.2003
///		iCamera->StartViewFinderDirectL(iCoeEnv->WsSession(),*iCoeEnv->ScreenDevice(),*iAppView->DrawableWindow(),screenRect,clipRect);
/// ADDED by pawel.defee@chiralion.com on 18.07.2003
/// Removes clipping rectangle
		iCamera->StartViewFinderDirectL(iCoeEnv->WsSession(),*iCoeEnv->ScreenDevice(),*iAppView->DrawableWindow(),screenRect);
/// END ADDED SECTION

	else
		iCamera->StopViewFinder();
	}

void CTCamAppUi::CaptureImageL()
	{
	TSize size;

/// REMOVED by pawel.defee@chiralion.com on 18.07.2003
///	iCamera->EnumerateCaptureSizes(size,0,CCamera::EFormatFbsBitmapColor16M);
///	iCamera->PrepareImageCaptureL(CCamera::EFormatFbsBitmapColor16M,0);
/// ADDED by pawel.defee@chiralion.com on 18.07.2003
/// Corrects the color mode to 64K
        iCamera->EnumerateCaptureSizes(size,0,CCamera::EFormatFbsBitmapColor64K);
        iCamera->PrepareImageCaptureL(CCamera::EFormatFbsBitmapColor64K,0);
/// END ADDED SECTION

	iCamera->CaptureImage();
	}

void CTCamAppUi::CaptureVideoL()
	{
	if (!iCamera->VideoCaptureActive())
		{
		TSize size;
		TReal32 rate = 0;

/// REMOVED by pawel.defee@chiralion.com on 18.07.2003
///		iCamera->EnumerateVideoFrameSizes(size,0,CCamera::EFormatFbsBitmapColor16M);
///		iCamera->EnumerateVideoFrameRates(rate,0,CCamera::EFormatFbsBitmapColor16M,0);
///		iCamera->PrepareVideoCaptureL(CCamera::EFormatFbsBitmapColor16M,0,0,2,1);
/// ADDED by pawel.defee@chiralion.com on 18.07.2003
/// Corrects the color mode to 64K
		iCamera->EnumerateVideoFrameSizes(size,0,CCamera::EFormatFbsBitmapColor64K);
		iCamera->EnumerateVideoFrameRates(rate,0,CCamera::EFormatFbsBitmapColor64K,0);
		iCamera->PrepareVideoCaptureL(CCamera::EFormatFbsBitmapColor64K,0,0,2,1);
/// END ADD SECTION

		iCamera->StartVideoCapture();
		}
	else
		iCamera->StopVideoCapture();
	}

void CTCamAppUi::ReserveComplete(TInt /*aError*/)
	{
	}

void CTCamAppUi::PowerOnComplete(TInt /*aError*/)
	{
	}

void CTCamAppUi::ViewFinderFrameReady(CFbsBitmap& /*aFrame*/)
	{
	}

void CTCamAppUi::ImageReady(CFbsBitmap* aBitmap,HBufC8* /*aData*/,TInt aError)
	{
	if (aBitmap)
		{
		iAppView->DrawImage(aBitmap);
		delete aBitmap;
		}
	User::LeaveIfError(aError);
	}

void CTCamAppUi::FrameBufferReady(MFrameBuffer* aFrameBuffer,TInt aError)
	{
	iAppView->DrawImage(aFrameBuffer->FrameL(0));
	aFrameBuffer->Release();
	User::LeaveIfError(aError);
	}

TVwsViewId CTCamAppUi::ViewId() const
	{
	return TVwsViewId::TVwsViewId(KUidTestCameraApp, KUidTestCameraAppView);
	}

void CTCamAppUi::ViewActivatedL(const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/,const TDesC8& /*aCustomMessage*/)
	{
	iCamera->Reserve();
	}

void CTCamAppUi::ViewDeactivated()
	{
	iCamera->Release();//Important, allows other clients to use camera
	}
	
_LIT(KContrastDialogTitle,"Contrast");
_LIT(KBrightnessDialogTitle,"Brightness");

//
// CTCamAppView
//

CTCamAppView::CTCamAppView():
	CCoeControl()
	{}

void CTCamAppView::ConstructL(const TRect& aRect)
	{
	CreateWindowL();
	EnableDragEvents();
	//SetExtentToWholeScreen();
	SetRect(aRect);
	ActivateL();
	}

CTCamAppView::~CTCamAppView()
	{}

void CTCamAppView::DrawImage(CFbsBitmap* aImage) const
	{
	CWindowGc& gc = SystemGc();
	gc.Activate(Window());
	TRect drawRect=Rect();
	TPoint pos;
	pos.iX = (3 * drawRect.iBr.iX / 4) - (aImage->SizeInPixels().iWidth / 2);
	pos.iY = (drawRect.iBr.iY - aImage->SizeInPixels().iWidth) / 2;
	gc.BitBlt(pos,aImage);
	TRect border(pos,aImage->SizeInPixels());
	border.Grow(1,1);
	gc.DrawRect(border);
	gc.Deactivate();
	iCoeEnv->WsSession().Flush();
	}

void CTCamAppView::Draw(const TRect& /*aRect*/) const
	{
	CWindowGc& gc = SystemGc();
	TRect drawRect(Rect());
	drawRect.Shrink(1,1);
	gc.DrawRect(drawRect);
	gc.Clear();
	}

TPoint CTCamAppView::DrawBorders(const TSize& aSize) const
	{
	CWindowGc& gc = SystemGc();
	gc.Activate(Window());
	TRect drawRect(Rect());
	TPoint pos;
	pos.iX = (drawRect.iBr.iX / 4) - (aSize.iWidth / 2);
	pos.iY = (drawRect.iBr.iY - aSize.iWidth) / 2;
	TRect border(pos,aSize);
	border.Grow(1,1);
	gc.SetPenColor(KRgbBlack);
	gc.DrawRect(border);
	gc.Deactivate();
	iCoeEnv->WsSession().Flush();
	return pos;
	}

//
// CTCamDocument
//

CTCamDocument::CTCamDocument(CEikApplication& aApp)
		: CEikDocument(aApp)
	{
	}

CEikAppUi* CTCamDocument::CreateAppUiL()
	{
    return new(ELeave) CTCamAppUi;
	}

//
// CTCamApp
//

TUid CTCamApp::AppDllUid() const
	{
	return KUidTestCameraApp;
	}

CApaDocument* CTCamApp::CreateDocumentL()
	{
	return new(ELeave) CTCamDocument(*this);
	}

//
// Exported function
//

EXPORT_C CApaApplication* NewApplication()
	{
	return new CTCamApp;
	}

//
// DLL Entry point
//

GLDEF_C TInt E32Dll(TDllReason)
	{
	return KErrNone;
	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -