📄 vc实现卡拉ok字幕叠加_1.htm
字号:
<TR></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=603 border=0>
<TBODY>
<TR>
<TD bgColor=#dee2f5 height=40>
<TABLE height=40 cellSpacing=0 cellPadding=0 width=590 align=center
border=0>
<TBODY>
<TR>
<TD align=middle><FONT
class=f22><B>VC实现卡拉OK字幕叠加</B></FONT></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD background=VC实现卡拉OK字幕叠加_1.files/newhard-040906_c_1.gif
height=1></TD></TR>
<TR>
<TD vAlign=top height=5></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width=603 border=0>
<TBODY>
<TR>
<TD vAlign=top align=middle width=373 rowSpan=9>
<TABLE cellSpacing=0 cellPadding=0 width=373 align=center
border=0>
<TBODY>
<TR>
<TD align=middle><SPAN id=pip></SPAN></TD></TR>
<TR>
<TD align=middle><IFRAME
src="VC实现卡拉OK字幕叠加_1.files/y-soft-column-1.htm"
frameBorder=0 width=360 scrolling=no
height=50></IFRAME></TD></TR></TBODY></TABLE></TD>
<TD width=5></TD>
<TD vAlign=top width=220>
<TABLE cellSpacing=0 cellPadding=0 width=220 border=0>
<TBODY>
<TR>
<TD colSpan=2><FONT class=f21><B>[文章信息]</B></FONT></TD></TR>
<TR>
<TD colSpan=2 height=10></TD></TR>
<TR>
<TD vAlign=top width=62>作者:</TD>
<TD vAlign=top width=158><FONT
color=#0e3e92>陆其明</FONT></TD></TR>
<TR>
<TD vAlign=top>时间:</TD>
<TD vAlign=top><FONT
color=#0e3e92>2003-11-21</FONT></TD></TR>
<TR>
<TD vAlign=top>出处:</TD>
<TD vAlign=top><FONT color=#0e3e92>VCHelp</FONT></TD></TR>
<TR>
<TD vAlign=top>责任编辑:</TD>
<TD vAlign=top><FONT color=#0e3e92>方舟</FONT></TD></TR>
<TR>
<TD colSpan=2 height=10></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=220 border=0>
<TBODY>
<TR>
<TD colSpan=2><FONT class=f21><B>[文章导读]</B></FONT></TD></TR>
<TR>
<TD colSpan=2 height=10></TD></TR>
<TR>
<TD vAlign=top colSpan=2><SPAN
class=f14>本文介绍了卡拉OK字幕叠加的一般原理以及VC上使用GDI的一种简单实现</SPAN></TD></TR>
<TR>
<TD colSpan=2 height=10></TD></TR></TBODY></TABLE>
<SCRIPT
language=JavaScript><!--var ad_id=1003//--></SCRIPT>
<SCRIPT language=JavaScript
src="VC实现卡拉OK字幕叠加_1.files/10.js"></SCRIPT>
</TD>
<TD width=5></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD>
<TD width=1 bgColor=#b9bebe rowSpan=13></TD>
<TD vAlign=top align=middle width=170 bgColor=#ffffff rowSpan=13>
<TABLE cellSpacing=5 cellPadding=0 width=165 border=0>
<TBODY>
<TR>
<TD align=middle>
<SCRIPT language=JavaScript><!--var ad_id=0403//--></SCRIPT>
<SCRIPT language=JavaScript
src="VC实现卡拉OK字幕叠加_1.files/04.js"></SCRIPT>
</TD></TR></TBODY></TABLE>
<TABLE height=28 cellSpacing=0 cellPadding=0 width=160
background=VC实现卡拉OK字幕叠加_1.files/2004-30.gif border=0>
<TBODY>
<TR>
<TD align=middle><B>advertisement</B></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=1 bgColor=#adadad></TD>
<TD align=middle bgColor=#ffffff><SPAN id=sv></SPAN></TD>
<TD width=1 bgColor=#adadad></TD></TR></TBODY></TABLE>
<TABLE height=1 cellSpacing=0 cellPadding=0 width=160 bgColor=#adadad
border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE>
<TABLE height=10 cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE>
<TABLE height=28 cellSpacing=0 cellPadding=0 width=160
background=VC实现卡拉OK字幕叠加_1.files/2004-30.gif border=0>
<TBODY>
<TR>
<TD align=middle><B>热点推荐</B></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width=160 border=0>
<TBODY>
<TR>
<TD width=1 bgColor=#adadad></TD>
<TD align=middle bgColor=#ffffff>
<TABLE cellSpacing=0 cellPadding=2 width=150 border=0>
<TBODY>
<TR>
<TD width=7>· </TD>
<TD width=143><A
href="http://www.yesky.com/SoftChannel/72339069014638592/20041017/1864973.shtml"
target=_blank>天极网软件频道改版调查</A></TD></TR>
<TR>
<TD width=7>· </TD>
<TD width=143><A
href="http://www.yesky.com/SoftChannel/72339069014638592/20041028/1869661.shtml"
target=_blank>10.28软件精选 找乐还是赌钱</A></TD></TR>
<TR>
<TD width=7>· </TD>
<TD width=143><A
href="http://www.yesky.com/SoftChannel/72342389024358400/20041028/1869618.shtml"
target=_blank>中国游戏业——被人们忽视的黑暗</A></TD></TR>
<TR>
<TD width=7>· </TD>
<TD width=143><A
href="http://www.yesky.com/SoftChannel/72356695560421376/20041028/1869602.shtml"
target=_blank>Windows 2000密码破解不完全指南</A></TD></TR>
<TR>
<TD width=7>· </TD>
<TD width=143><A
href="http://www.yesky.com/SoftChannel/72350085605752832/20041028/1869596.shtml"
target=_blank>解决XP SP2带来的网络故障(上)</A></TD></TR></TBODY></TABLE></TD>
<TD width=1 bgColor=#adadad></TD></TR></TBODY></TABLE>
<TABLE height=1 cellSpacing=0 cellPadding=0 width=160 bgColor=#adadad
border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE></TD>
<TD width=1 bgColor=#b9bebe rowSpan=13></TD></TR>
<TR>
<TD vAlign=top bgColor=#f0f2fb height=5></TD></TR>
<TR>
<TD vAlign=top background=VC实现卡拉OK字幕叠加_1.files/newhard-040906_c_1.gif
bgColor=#f0f2fb height=1></TD></TR>
<TR>
<TD vAlign=top bgColor=#dee2f5>
<TABLE height=25 cellSpacing=0 cellPadding=0 width=590 align=center
border=0>
<TBODY>
<TR>
<TD width=90><FONT class=f21><B>[正文]</B></FONT></TD>
<TD align=right width=480>
<P align=right><FONT color=red>1 <A
href="http://www.yesky.com/SoftChannel/72342371928702976/20031121/1746826_1.shtml">2</A>
<A
href="http://www.yesky.com/SoftChannel/72342371928702976/20031121/1746826_2.shtml">3</A>
<A
href="http://www.yesky.com/SoftChannel/72342371928702976/20031121/1746826_3.shtml">4</A>
<A
href="http://www.yesky.com/SoftChannel/72342371928702976/20031121/1746826_1.shtml">下一页</A></FONT></P></TD>
<TD align=middle width=20></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD vAlign=top background=VC实现卡拉OK字幕叠加_1.files/newhard-040906_c_1.gif
bgColor=#f0f2fb height=1></TD></TR>
<TR>
<TD vAlign=top bgColor=#f0f2fb height=10></TD></TR>
<TR>
<TD vAlign=top bgColor=#f0f2fb>
<TABLE cellSpacing=0 cellPadding=0 width=590 align=center border=0>
<TBODY>
<TR>
<TD><SPAN class=f14>
<TABLE cellSpacing=0 cellPadding=5 width=570 bgColor=#fbe392
border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=5 width=570 border=0>
<TBODY>
<TR>
<TD align=middle width=200 bgColor=#e1b004><FONT
color=#ffffff><A
href="http://www.my5757.com/yesky/dy.jsp"
target=_blank>天极IT资讯短信服务</A> <B>电脑小技巧</B></FONT><BR>
<TABLE cellSpacing=0 cellPadding=3 width="100%"
bgColor=#fffcc0 border=0>
<SCRIPT> function check4() { if (dn.mobile.value.length!=11) { alert("手机号码不正确!"); dn.mobile.focus(); return false; } return true; } </SCRIPT>
<FORM name=dn onsubmit="return check4()"
action=http://www.my5757.com/tj/join.jsp
target=_blank>
<TBODY>
<TR vAlign=center>
<TD>资费:包月5元<BR>手机: <INPUT
style="BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; BORDER-LEFT: #000000 1px solid; BORDER-BOTTOM: #000000 1px solid; HEIGHT: 16px"
size=11 name=mobile> <INPUT type=image height=18
width=45 src="VC实现卡拉OK字幕叠加_1.files/d34.gif"
align=middle border=0 name=image2> </TD></TR><INPUT
type=hidden value=yjq name=stype>
</FORM></TBODY></TABLE></TD>
<TD width=370
bgColor=#fbc403>介绍:细处着手,巧处用功。高手和菜鸟之间的差别就是:高手什么都知道,菜鸟知道一些。电脑小技巧收集最新奇招高招,让你轻松踏上高手之路。(首月免费)
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR><BR> <STRONG>一.
GDI编程基础
</STRONG><BR><BR> 字幕叠加,应当是属于图形、图像处理的范畴。在Windows平台上,图形、图像处理的方法当然首选GDI(Graphics
Device
Interface,图形设备接口)。GDI是什么?GDI其实是一套API函数;它们功能丰富,使用起来简单、灵活。下面,我们首先来介绍一些GDI编程的基础知识。<BR><BR><IFRAME
align=right marginWidth=0 marginHeight=0
src="VC实现卡拉OK字幕叠加_1.files/dell-notebook-pip.htm" frameBorder=0
width=360 scrolling=no
height=300></IFRAME> GDI函数有很多,我们大致可以把它们分成如下几类:<BR><BR> ·
设备上下文(Device Context,简称DC)函数,如GetDC、CreateDC、DeleteDC等;<BR><BR> ·
画线函数,如LineTo、Polyline、Arc等;<BR><BR> ·
填充画图函数,如Ellipse、FillRect、Pie等;<BR><BR> ·
画图属性函数,如SetBkColor、SetBkMode、SetTextColor等;<BR><BR> ·
文本、字体函数,如TextOut、GetTextExtentPoint32、GetFontData等;<BR><BR> ·
位图函数,如SetPixel、BitBlt、StretchBlt等;<BR><BR> ·
坐标函数,如DPtoLP、LPtoDP、ScreenToClient、ClientToScreen等;<BR><BR> ·
映射函数,如SetMapMode、SetWindowExtEx、SetViewportExtEx等;<BR><BR> ·
元文件(MetaFile)函数,如PlayMetaFile、SetWinMetaFileBits等;<BR><BR> ·
区域(Region)函数,如FillRgn、FrameRgn、InvertRgn等;<BR><BR> ·
路径(Path)函数,如BeginPath、EndPath、StrokeAndFillPath等;<BR><BR> ·
裁剪(Clipping)函数,如SelectClipRgn、SelectClipPath等。<BR><BR> 上述这些函数可以完成绘制用户界面中的各个部分,包括我们在Windows平台上司空见惯的窗口、菜单、工具条、按钮等。除了完成显示操作功能外,GDI还提供了一些绘图对象,用以渲染显示。这些GDI对象包括:<BR><BR> 设备上下文(DC)——具有如显示器或打印机等输出设备的绘图属性信息的数据结构;<BR><BR> 画笔(Pen)——用于绘制线条;<BR><BR> 画刷(Brush)——用于图案的填充;<BR><BR> 字体(Font)——用于确定文本字符的样式;<BR><BR> 位图(Bitmap)——用于存储图像;<BR><BR> 调色板(Palette)——屏幕上画图时可以使用的一些颜色的集合。<BR><BR> DC在GDI中是一个非常重要的概念。在MSDN上查看各个GDI函数的使用说明,我们会发现大部分GDI函数都有一个HDC类型的参数;HDC就是DC句柄。Windows应用程序进行图形、图像处理的一般操作步骤如下:<BR><BR> 1.
取得指定窗口的DC;<BR><BR> 2. 确定使用的坐标系及映射方式; <BR><BR> 3.
进行图形、图像或文字处理;<BR><BR> 4.
释放所使用的DC。<BR><BR> 为了进一步简化GDI函数的使用,或者说为了适应面向对象的程序设计风格,微软的MFC类库提供了几个DC的封装类。这些类的继承关系如下:
<BR><BR><IMG
onerror="this.src='http://www.yesky.com/image20010518/85980.jpg';"
hspace=3 src="VC实现卡拉OK字幕叠加_1.files/85980.jpg" align=center vspace=1
border=1><BR>图1 关于DC的几个MFC类的继承关系
<BR><BR> 我们知道,绝大部分MFC类都是从CObject类派生的,CDC类也不例外。我们看到,CDC类是最基本的DC封装类;它几乎对应封装了所有的GDI函数。另外,CDC类的各个派生类各有专门的用途:<BR><BR> CClientDC——在窗口的客户区画图的DC;<BR><BR> CMetaFileDC——用于操作Windows元文件的DC;<BR><BR> CPaintDC——响应WM_PAINT消息时画图使用的DC,多见于MFC程序的OnDraw函数中;<BR><BR> CWindowDC——在整个窗口范围(包括框架、工具条等)中画图的DC。<BR><BR> MFC除了对DC进行类封装外,对其它GDI对象也进行了类封装。这些类的继承关系如下:<BR><BR><IMG
onerror="this.src='http://www.yesky.com/image20010518/85981.jpg';"
hspace=3 src="VC实现卡拉OK字幕叠加_1.files/85981.jpg" align=center vspace=1
border=1><BR>图2
GDI对象的MFC封装类的继承关系<BR><BR> CGdiObject——GDI对象的父类,定义了GDI对象封装类的一些公有函数接口;<BR><BR> CBitmap——位图相关操作的封装类,包括位图的装入或创建等;<BR><BR> CBrush——画刷对象的封装类;<BR><BR> CFont——字体属性及相关操作的封装类;<BR><BR> CPalette——调色板的封装类;<BR><BR> CPen——画笔对象的封装类;<BR><BR> CRgn——区域对象以及区域相关操作的封装类。<BR><BR> 通过上述介绍,相信读者对GDI编程有了一定的了解。接下去,我们就来讨论卡拉OK字幕叠加的实现原理。<BR><BR></SPAN><BR></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD vAlign=top bgColor=#f0f2fb height=10></TD></TR>
<TR>
<TD vAlign=top background=VC实现卡拉OK字幕叠加_1.files/newhard-040906_c_1.gif
bgColor=#f0f2fb height=1></TD></TR>
<TR>
<TD vAlign=top bgColor=#dee2f5>
<TABLE height=25 cellSpacing=0 cellPadding=0 width=590 align=center
border=0>
<TBODY>
<TR>
<TD width=90></TD>
<TD align=right width=480>
<P align=right><FONT color=red>1 <A
href="http://www.yesky.com/SoftChannel/72342371928702976/20031121/1746826_1.shtml">2</A>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -