Symbian中卡拉OK字幕实现

  Symbian中卡拉OK字幕实现 

<script type="text/javascript"> document.body.oncopy = function() { if (window.clipboardData) { setTimeout(function() { var text = clipboardData.getData("text"); if (text && text.length > 300) { text = text + "/r/n/n本文来自CSDN博客,转载请标明出处:" + location.href; clipboardData.setData("text", text); } }, 100); } } </script>

纯属个人娱乐,代码贴出,有什么问题和建议可以留言。

实现步骤如下:

在.h文件中

private:
 /**
 * CreateBackBufferL.
 * 用于创建双缓冲位图资源的函数.
 */
 void CreateBackBufferL();
 /**
 * ReleaseBackBuffer.
 * 用于释放双缓冲位图资源的函数.
 */
 void ReleaseBackBuffer();

 void DrawToBackBuffer();

 //双缓冲用到的私有成员
private:
 CFbsBitmap*                     iBackBuffer; //双缓冲中用到的位图
 CFbsBitmapDevice*               iBackBufferDevice; //用于得到Gc
 CFbsBitGc*                      iBackBufferContext; //双缓冲位图Gc

 CFbsBitmap*                     iBackBuffer_2; //双缓冲中用到的位图
 CFbsBitmapDevice*               iBackBufferDevice_2; //用于得到Gc
 CFbsBitGc*                      iBackBufferContext_2; //双缓冲位图Gc

在。cpp中函数的实现

void CAuditionContainer::CreateBackBufferL()
{
 // Create back buffer bitmap
 iBackBuffer = new (ELeave) CFbsBitmap;

 User::LeaveIfError( iBackBuffer->Create(TSize(240,30),
  iEikonEnv->DefaultDisplayMode()));

 // Create back buffer graphics context
 iBackBufferDevice = CFbsBitmapDevice::NewL(iBackBuffer);
 User::LeaveIfError(iBackBufferDevice->CreateContext(iBackBufferContext));
 iBackBufferContext->SetPenStyle(CGraphicsContext::ESolidPen);

 iBackBuffer_2 = new (ELeave) CFbsBitmap;

 User::LeaveIfError( iBackBuffer_2->Create(TSize(240,30),
  iEikonEnv->DefaultDisplayMode()));

 // Create back buffer graphics context
 iBackBufferDevice_2 = CFbsBitmapDevice::NewL(iBackBuffer_2);
 User::LeaveIfError(iBackBufferDevice_2->CreateContext(iBackBufferContext_2));
 iBackBufferContext_2->SetPenStyle(CGraphicsContext::ESolidPen);
}

void CAuditionContainer::ReleaseBackBuffer()
{
 // Release double buffering classes
 if (iBackBufferContext)
 {
  delete iBackBufferContext;
  iBackBufferContext = NULL;
 }
 if (iBackBufferDevice)
 {
  delete iBackBufferDevice;
  iBackBufferDevice = NULL;
 }
 if (iBackBuffer)
 {
  delete iBackBuffer;
  iBackBuffer = NULL;
 }
 if (iBackBufferContext_2)
 {
  delete iBackBufferContext_2;
  iBackBufferContext_2 = NULL;
 }
 if (iBackBufferDevice_2)
 {
  delete iBackBufferDevice_2;
  iBackBufferDevice_2 = NULL;
 }
 if (iBackBuffer_2)
 {
  delete iBackBuffer_2;
  iBackBuffer_2 = NULL;
 }
}

void CAuditionContainer::DrawToBackBuffer()
{
 const CFont *Font = CEikonEnv::Static()->DenseFont();
 iBackBufferContext->UseFont(Font);
// _LIT(KText,"hello world");

 TBuf8<20>   msg8 ;
 TBuf<20>    KText ;
 msg8.Format(_L8(" 谢谢您的使用")) ;
 ConvGbk2Uni(msg8, KText) ;

 iBackBufferContext->SetPenColor(KRgbGreen);
 iBackBufferContext->DrawText(KText,TPoint(0,Font->HeightInPixels()));


 iBackBufferContext_2->UseFont(Font);
// _LIT(KText,"hello world");
 iBackBufferContext_2->SetPenColor(KRgbRed);
 iBackBufferContext_2->DrawText(KText,TPoint(0,Font->HeightInPixels()));
}

void CAuditionContainer::Draw( const TRect& /*aRect*/ ) const
{
 CWindowGc& gc = SystemGc();
 gc.Clear();
 gc.BitBlt(TPoint(0,100),iBackBuffer,TRect(TPoint(0,0),TSize(iBackBuffer->SizeInPixels().iWidth/5,iBackBuffer->SizeInPixels().iHeight)));
 gc.BitBlt(TPoint(iBackBuffer_2->SizeInPixels().iWidth/5,100),iBackBuffer_2,TRect(TPoint(iBackBuffer_2->SizeInPixels().iWidth/5,0),TSize(iBackBuffer_2->SizeInPixels().iWidth*4/5,iBackBuffer_2->SizeInPixels().iHeight)));

}

使用步骤

第一步:初始化

     在container的SetRect之前添加如下代码:

      iBackBuffer = NULL;
      iBackBufferDevice = NULL;
      iBackBufferContext = NULL;

      iBackBuffer_2 = NULL;
      iBackBufferDevice_2 = NULL;
      iBackBufferContext_2 = NULL;

第二步:在sizechange中添加代码

      ReleaseBackBuffer(); //释放双缓冲位图资源
      CreateBackBufferL(); //创建双缓冲位图资源
      DrawToBackBuffer(); //重画双缓冲位图资源

第三步:编译运行即可。

图片没发上传,看不到效果了。

实现的基本思路:将 “谢谢您的使用”这句话分别用两种字体颜色写在两张位图上,在Draw函数中通过BitBlt函数将两张图拼接,即可实现一个字,两种颜色。如需要实现卡 拉OK中的移动效果,只需要通过一个循环定时器,改变BitBlt函数中的TPoint和TRect即可。还算是比较方便的。

抱歉贴掉了一个函数,在这里补上

 void ConvGbk2Uni(TDesC8& original, TDes& res)
{
 //RFs aFileServerSession = CEikonEnv::Static()->FsSession();
 RFs aFileServerSession;
 aFileServerSession.Connect();
 // CleanupStack::Pop();
 CCnvCharacterSetConverter* converter=CCnvCharacterSetConverter::NewLC();

 if(converter->PrepareToConvertToOrFromL(KCharacterSetIdentifierGbk,aFileServerSession)!=CCnvCharacterSetConverter::EAvailable)
  User::Leave(KErrNotSupported);

 TInt state=CCnvCharacterSetConverter::KStateDefault;

 TPtrC8 str( original );
 HBufC* iInfoText = HBufC::NewL( str.Length() );

 TPtr16 ptr = iInfoText->Des();

 if(CCnvCharacterSetConverter::EErrorIllFormedInput == converter->ConvertToUnicode(ptr, str, state))
  User::Leave(KErrArgument);

 res.Zero() ;
 res.Copy(ptr) ;
 aFileServerSession.Close();
 CleanupStack::PopAndDestroy();
 delete iInfoText;
}

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计,皆可应用在项目、毕业设计、课程设计、期末/期/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值