📄 testcameraapp.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 + -