科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VC实现卡拉OK字幕叠加

VC实现卡拉OK字幕叠加

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文介绍了卡拉OK字幕叠加的一般原理以及VC上使用GDI的一种简单实现。

作者:陆其明 来源:VCHelp 2007年10月21日

关键字: 卡拉OK VC

  • 评论
  • 分享微博
  • 分享邮件
一. GDI编程基础

  字幕叠加,应当是属于图形、图像处理的范畴。在Windows平台上,图形、图像处理的方法当然首选GDI(Graphics Device Interface,图形设备接口)。GDI是什么?GDI其实是一套API函数;它们功能丰富,使用起来简单、灵活。下面,我们首先来介绍一些GDI编程的基础知识。

  GDI函数有很多,我们大致可以把它们分成如下几类:

  · 设备上下文(Device Context,简称DC)函数,如GetDC、CreateDC、DeleteDC等;

  · 画线函数,如LineTo、Polyline、Arc等;

  · 填充画图函数,如Ellipse、FillRect、Pie等;

  · 画图属性函数,如SetBkColor、SetBkMode、SetTextColor等;

  · 文本、字体函数,如TextOut、GetTextExtentPoint32、GetFontData等;

  · 位图函数,如SetPixel、BitBlt、StretchBlt等;

  · 坐标函数,如DPtoLP、LPtoDP、ScreenToClient、ClientToScreen等;

  · 映射函数,如SetMapMode、SetWindowExtEx、SetViewportExtEx等;

  · 元文件(MetaFile)函数,如PlayMetaFile、SetWinMetaFileBits等;

  · 区域(Region)函数,如FillRgn、FrameRgn、InvertRgn等;

  · 路径(Path)函数,如BeginPath、EndPath、StrokeAndFillPath等;

  · 裁剪(Clipping)函数,如SelectClipRgn、SelectClipPath等。

  上述这些函数可以完成绘制用户界面中的各个部分,包括我们在Windows平台上司空见惯的窗口、菜单、工具条、按钮等。除了完成显示操作功能外,GDI还提供了一些绘图对象,用以渲染显示。这些GDI对象包括:

  设备上下文(DC)——具有如显示器或打印机等输出设备的绘图属性信息的数据结构;

  画笔(Pen)——用于绘制线条;

  画刷(Brush)——用于图案的填充;

  字体(Font)——用于确定文本字符的样式;

  位图(Bitmap)——用于存储图像;

  调色板(Palette)——屏幕上画图时可以使用的一些颜色的集合。

  DC在GDI中是一个非常重要的概念。在MSDN上查看各个GDI函数的使用说明,我们会发现大部分GDI函数都有一个HDC类型的参数;HDC就是DC句柄。Windows应用程序进行图形、图像处理的一般操作步骤如下:

  1. 取得指定窗口的DC;

  2. 确定使用的坐标系及映射方式;

  3. 进行图形、图像或文字处理;

  4. 释放所使用的DC。

  为了进一步简化GDI函数的使用,或者说为了适应面向对象的程序设计风格,微软的MFC类库提供了几个DC的封装类。这些类的继承关系如下:


图1 关于DC的几个MFC类的继承关系

  我们知道,绝大部分MFC类都是从CObject类派生的,CDC类也不例外。我们看到,CDC类是最基本的DC封装类;它几乎对应封装了所有的GDI函数。另外,CDC类的各个派生类各有专门的用途:

  CClientDC——在窗口的客户区画图的DC;

  CMetaFileDC——用于操作Windows元文件的DC;

  CPaintDC——响应WM_PAINT消息时画图使用的DC,多见于MFC程序的OnDraw函数中;

  CWindowDC——在整个窗口范围(包括框架、工具条等)中画图的DC。

  MFC除了对DC进行类封装外,对其它GDI对象也进行了类封装。这些类的继承关系如下:


图2 GDI对象的MFC封装类的继承关系

  CGdiObject——GDI对象的父类,定义了GDI对象封装类的一些公有函数接口;

  CBitmap——位图相关操作的封装类,包括位图的装入或创建等;

  CBrush——画刷对象的封装类;

  CFont——字体属性及相关操作的封装类;

  CPalette——调色板的封装类;

  CPen——画笔对象的封装类;

  CRgn——区域对象以及区域相关操作的封装类。

  通过上述介绍,相信读者对GDI编程有了一定的了解。接下去,我们就来讨论卡拉OK字幕叠加的实现原理。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章