📄 drawcontainer.cpp
字号:
/*
* ============================================================================
* Name : CDrawContainer from DrawContainer.h
* Part of : Draw
* Created : 22.04.2005 by
* Implementation notes:
* Initial content was generated by Series 60 Application Wizard.
* Version :
* Copyright:
* ============================================================================
*/
// INCLUDE FILES
#include "DrawContainer.h"
#include <coecntrl.h>
#include <eiklabel.h> // for example label control
//add by wwx
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define Clip1(a) ((a)>255?255:((a)<0?0:(a)))
#define Clip3(min,max,val) (((val)<(min))?(min):(((val)>(max))?(max):(val)))
FILE *p_yuv;
unsigned char imgY[144][176],imgU[144][176],imgV[144][176];
unsigned char ER[144][176],EG[144][176],EB[144][176];
TUint8 *pData;
// ================= MEMBER FUNCTIONS =======================
// ---------------------------------------------------------
// CDrawContainer::ConstructL(const TRect& aRect)
// EPOC two phased constructor
// ---------------------------------------------------------
//
void CDrawContainer::ConstructL(const TRect& aRect)
{
CreateWindowL();
/*
iLabel = new (ELeave) CEikLabel;
iLabel->SetContainerWindowL( *this );
iLabel->SetTextL( _L("Example View") );
iToDoLabel = new (ELeave) CEikLabel;
iToDoLabel->SetContainerWindowL( *this );
iToDoLabel->SetTextL( _L("Add Your controls\n here") );
*/
iOffScrnBmp = new (ELeave) CFbsBitmap;
User::LeaveIfError(iOffScrnBmp->Create(aRect.Size(), EColor16M));
iOffScrnBmpDevice = CFbsBitmapDevice::NewL(iOffScrnBmp);
User::LeaveIfError(iOffScrnBmpDevice->CreateContext(iOffScrnContext));
//R=(byte**)calloc(rows, sizeof(byte*));
SetRect(aRect);
ActivateL();
color=0;
}
// Destructor
CDrawContainer::~CDrawContainer()
{
//delete iLabel;
//delete iToDoLabel;
//add by wwx
delete iOffScrnBmp;
delete iOffScrnBmpDevice;
delete iOffScrnContext;
//end
}
// ---------------------------------------------------------
// CDrawContainer::SizeChanged()
// Called by framework when the view size is changed
// ---------------------------------------------------------
//
/*
void CDrawContainer::SizeChanged()
{
// TODO: Add here control resize code etc.
iLabel->SetExtent( TPoint(10,10), iLabel->MinimumSize() );
iToDoLabel->SetExtent( TPoint(10,100), iToDoLabel->MinimumSize() );
}
// ---------------------------------------------------------
// CDrawContainer::CountComponentControls() const
// ---------------------------------------------------------
//
TInt CDrawContainer::CountComponentControls() const
{
return 2; // return nbr of controls inside this container
}
// ---------------------------------------------------------
// CDrawContainer::ComponentControl(TInt aIndex) const
// ---------------------------------------------------------
//
CCoeControl* CDrawContainer::ComponentControl(TInt aIndex) const
{
switch ( aIndex )
{
case 0:
return iLabel;
case 1:
return iToDoLabel;
default:
return NULL;
}
}
*/
// ---------------------------------------------------------
// CDrawContainer::Draw(const TRect& aRect) const
// ---------------------------------------------------------
//
TRect rect;//
void CDrawContainer::Draw(const TRect& aRect) const
//void CDrawContainer::Draw(char **R,char **G,char **B)
{
rect=Rect();
// Drawmap(255);
//CWindowGc& gc = SystemGc();
// TODO: Add your drawing code here
// example code...
/*
gc.SetPenStyle( CGraphicsContext::ENullPen );
gc.SetBrushColor( KRgbGray );
gc.SetBrushStyle( CGraphicsContext::ESolidBrush );
gc.DrawRect( aRect );
*/
TRect rect = Rect();
//iOffScrnContext->Clear(rect);
TInt x,y;
int flag = color;
//for (int i=0; i<100; i+=2)
// {
// iOffScrnContext->DrawRect(TRect(TPoint(i,i), TSize(50,50)));
//}
/*TBitmapUtil bitmapUtil(iOffScrnBmp);
if(iOffScrnBmp->IsLargeBitmap())
{
bitmapUtil.Begin(TPoint(0,0));
}*/
//TUint8 *
pData = (TUint8*)iOffScrnBmp->DataAddress();
for(x=0;x<144;x++)
for(y=0;y<176;y++)
{
if(flag)
{
*pData++ = EB[x][y];
*pData++ = EG[x][y];
*pData++ = ER[x][y];
/*pData++ = flag;
*pData++ = 0;
*pData++ = 0;*/
}
else
{
*pData++ = 0;
*pData++ = 0;
*pData++ = 0;
}
}
// if(iOffScrnBmp->IsLargeBitmap()) bitmapUtil.End();
CWindowGc& gc = SystemGc();
//ActivateGc();
//Window().Invalidate( rect );
//Window().BeginRedraw( rect );
gc.BitBlt(TPoint(0,0), iOffScrnBmp);
//gc.DrawBitmap(TPoint(0,0), iOffScrnBmp);
//Window().EndRedraw();
//DeactivateGc();
//gc.DrawRect( aRect );
}
// ---------------------------------------------------------
// CDrawContainer::HandleControlEventL(
// CCoeControl* aControl,TCoeEvent aEventType)
// ---------------------------------------------------------
//
void CDrawContainer::HandleControlEventL(
CCoeControl* /*aControl*/,TCoeEvent /*aEventType*/)
{
// TODO: Add your control event handler code here
}
// End of File
//add by wwx
//void CDrawContainer::Drawmap(const TRect& aRect) const
void CDrawContainer::Drawmap(int R) const //const TRect& aRect,
{
Draw(rect);
/*
//for (int i=0; i<100; i+=2)
// {
// iOffScrnContext->DrawRect(TRect(TPoint(i,i), TSize(50,50)));
//}
rect=Rect();
TUint8 *pData = (TUint8*)iOffScrnBmp->DataAddress();
for(y=0;y<144;y++)
for(x=0;x<176;x++)
{
*pData++ = R;
*pData++ = 0;
*pData++ = 0;
}
CWindowGc& gc = SystemGc();
gc.BitBlt(TPoint(0,0), iOffScrnBmp);
*/
}
void CDrawContainer::SetData(int x)
{
color=x;
p_yuv=fopen("d:\\out.yuv","rb");
}
int CDrawContainer::Readyuv()
{
int i,j;
//p_yuv=fopen("d:\\out.yuv","rb");
if(p_yuv == NULL) return 0;
for(i=0;i<144;i++)
for(j=0;j<176;j++)
imgY[i][j]=fgetc(p_yuv);
for (i=0;i<72;i++)
for(j=0;j<88;j++)
imgU[2*i][2*j]=fgetc(p_yuv);
for (i=0;i<72;i++)
for(j=0;j<88;j++)
imgV[2*i][2*j]=fgetc(p_yuv);
return 1;
}
void CDrawContainer::YuvToRgb()
{
int C,D,E;
int i,j;
//return;
//midy
//end midy
//midu
for(i=0;i<72;i++)
for(j=0;j<88;j++)
{
imgU[2*i][2*j+1]=Clip1((9*(imgU[2*i][2*j]+imgU[2*i][Clip3(0,2*87,2*j+2)])-(imgU[2*i][Clip3(0,2*87,2*j-2)]+imgU[2*i][Clip3(0,87,2*j+4)])+8)>>4);
imgU[2*i+1][2*j]=Clip1((9*(imgU[2*i][2*j]+imgU[Clip3(0,2*71,2*i+2)][2*j])-(imgU[Clip3(0,2*71,2*i-2)][2*j]+imgU[Clip3(0,71,2*i+4)][2*j])+8)>>4);
}
for(i=0;i<72;i++)
for(j=0;j<88;j++)
imgU[2*i+1][2*j+1]=Clip1((9*(imgU[2*i+1][2*j]+imgU[2*i+1][Clip3(0,2*88-2,2*j+2)])-(imgU[2*i+1][Clip3(0,2*88-2,2*j-2)]+imgU[2*i+1][Clip3(0,2*88-2,2*j+4)])+8)>>4);
//end midu
//midv
for(i=0;i<72;i++)
for(j=0;j<88;j++)
{
imgV[2*i][2*j+1]=Clip1((9*(imgV[2*i][2*j]+imgV[2*i][Clip3(0,2*87,2*j+2)])-(imgV[2*i][Clip3(0,2*87,2*j-2)]+imgV[2*i][Clip3(0,87,2*j+4)])+8)>>4);
imgV[2*i+1][2*j]=Clip1((9*(imgV[2*i][2*j]+imgV[Clip3(0,2*71,2*i+2)][2*j])-(imgV[Clip3(0,2*71,2*i-2)][2*j]+imgV[Clip3(0,71,2*i+4)][2*j])+8)>>4);
}
for(i=0;i<72;i++)
for(j=0;j<88;j++)
imgV[2*i+1][2*j+1]=Clip1((9*(imgV[2*i+1][2*j]+imgV[2*i+1][Clip3(0,2*88-2,2*j+2)])-(imgV[2*i+1][Clip3(0,2*88-2,2*j-2)]+imgV[2*i+1][Clip3(0,2*88-2,2*j+4)])+8)>>4);
//end midv
//yuv to RGB
for(i=0;i<144;i++)
for(j=0;j<176;j++)
{
C=imgY[i][j]-16;
D=imgU[i][j]-128;
E=imgV[i][j]-128;
ER[i][j]=Clip1(( 298 * C + 409 * E + 128) >> 8);
EG[i][j]=Clip1(( 298 * C - 100 * D - 208 * E + 128) >> 8);
EB[i][j]=Clip1(( 298 * C + 516 * D + 128) >> 8);
}
}
void CDrawContainer::FreeYuv()
{
fclose(p_yuv);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -