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;
}
Symbian中卡拉OK字幕实现相关推荐
- EDIUS中怎么实现卡拉OK字幕的制作
我们在看歌曲的MV的时候,经常会看到歌词一个一个地按照人声的节奏出现,这种效果是怎么实现的呢?其实这种字幕效果的实现一点也不难,用EDIUS视频编辑软件就可以完成.下面就让小编通过一篇EDIUS教程文 ...
- MFC开发——卡拉OK字幕制作
依然是为了赶老师作业,又去学了点东西,然后做了个小项目.首先在开始做项目之前,说一下整体思路,要实现卡拉OK字幕效果,就要对文本类与定时器有一定的掌握,通过定时器的更新,可以实现字体颜色的变化,与字幕 ...
- 卡拉ok歌词html,怎样制作卡拉ok字幕,如何亲手制作专业卡拉ok视频|卡拉ok字幕制作软件...
如何亲手制作专业卡拉ok字幕视频,是今天的主题.卡拉OK和MTV一样,同样是种歌词字幕效果.不同在于,MTV是逐行显示的,而卡拉OK和我们在KTV看到的MV的歌词字幕一样,是逐字显示的.然后卡拉OK的 ...
- 用小灰熊做卡拉OK字幕
发表时间:2007-1-31 阅读次数:662 1.制作歌词脚本文件 在进行歌曲卡拉OK字幕制作工作之前,我们先用文本编辑软件,如记事本程序将<会有那么一天>歌曲的歌词文件编辑好 ...
- VC实现卡拉OK字幕叠加
一. GDI编程基础 字幕叠加,应当是属于图形.图像处理的范畴.在Windows平台上,图形.图像处理的方法当然首选GDI(Graphics Device Interface,图形设备接口).GDI是 ...
- 个人第一个卡拉OK字幕诞生
做到一半,我才发现自己选错了歌- 最麻烦的是不懂韩语,所以很难拿捏每个单字的起止时间,而且还有部分连音和变音,更懵了- 最后做完了还发现,原本的拼写完全被打乱,单字中间的空格统统不见了-- 要不要这么 ...
- 制作卡拉OK字幕KSC文件
制作卡拉OK字幕KSC文件 1.制作歌词脚本文件 在进行歌曲卡拉OK字幕制作工作之前,我们先用文本编辑软件,如记事本程序将歌曲的歌词文件编辑好,行与行之间不要留空行 ...
- 继第一个卡拉OK字幕之后,第一个动态字幕诞生~T-ara - Day By Day
前面发过一次截图,没有内容,竟然被告知不符合互联网相关安全规范-这又不是AV图- 先放链接: [MV] Day By Day (Dance Ver.) 字幕 [点击下载] [MV] Day By D ...
- 小灰熊卡拉OK字幕使用教程
1.1 什么是KBuilder3.5 KBuilder 是"小灰熊卡拉OK字幕设计工具"的主程序,通过视频非线性编辑软件 Adobe Premiere.Sony Vegas 等将其 ...
最新文章
- iOS底层原理 - 常驻线程
- python 元组传参 *args 字典传参 **kwargs 的用法
- java如何实现乌龟爬行_乌龟是怎样爬行的
- 并发和Read-copy update(RCU)
- mt19937 -- 高质量随机数
- 使用.Net6中的System.Text.Json遇到几个常见问题及解决方案
- 现代软件工程系列 学生的精彩文章 (3) 如何在Bug 不断的情况下还能保持平常心... [zz]
- 完全搞定iframe(框架)里的滚动条
- 【Spring学习笔记-MVC-12】Spring MVC视图解析器之ResourceBundleViewResolver
- Square(hdu 1511)
- 精品微信小程序ssm培训机构管理系统+后台管理系统|前后分离VUE
- CCNet:Criss-Cross Attention for semantic Segmentation
- 高一 Unit2 动名词
- 数据结构名词解释详细总结
- 计算机专业需不需要英语翻译,谈计算机专业英语翻译的方法.doc
- 远程控制与Nvidia显卡驱动和CUDA版本
- MySQL数据库——数据库设计概念和数据库设计步骤
- Kubernetes学习之Helm包管理器
- clickhouse的日期处理
- 迎难而上 数据库管理员怎样走向成功?(转)