现在的位置: 首页 > 综合 > 正文

gdi gdiplus directx

2017年11月07日 ⁄ 综合 ⁄ 共 4307字 ⁄ 字号 评论关闭

GDI在Windows中定义为Graphics Device Interface,即图形设备接口,是Windows API(Application

Programming Interface)的一个重要组成部分。它是Windows图形显示程序与实际物理设备之间的桥梁,GDI使

得用户无需关心具体设备的细节,而只需在一个虚拟的环境(即逻辑设备)中进行操作。它的桥梁作用体现在:

  (1)用户通过调用GDI函数将逻辑空间的操作转化为具体针对设备驱动程序的调用。

  为实现图形设备无关性,Windows 的绘图操作在一个设备描述表上进行。用户拥有自己的"逻辑坐标"系统,

它独立于实际的物理设备,与"设备坐标"相对应。开发Windows应用程序时,程序员关心的是逻辑坐标,我们在

逻辑坐标系上绘图,利用GDI将逻辑窗口映射到物理设备上。

  (2)GDI能检测具体设备的能力,并依据具体的设备以最优方式驱动这些设备,完成真实的显示。

  GDI函数大致可分类为:设备上下文函数(如GetDC、CreateDC、DeleteDC)、 画线函数(如LineTo、Polyline

、Arc)、填充画图函数(如Ellipse、FillRect、Pie)、画图属性函数(如SetBkColor、SetBkMode、

SetTextColor)、文本、字体函数(如TextOut、GetFontData)、位图函数(如SetPixel、BitBlt、StretchBlt)、

坐标函数(如DPtoLP、LPtoDP、ScreenToClient、ClientToScreen)、映射函数(如SetMapMode、SetWindowExtEx

、SetViewportExtEx)、元文件函数(如PlayMetaFile、SetWinMetaFileBits)、区域函数(如FillRgn、FrameRgn

、InvertRgn)、路径函数(如BeginPath、EndPath、StrokeAndFillPath)、裁剪函数(如SelectClipRgn、

SelectClipPath)等。

  GDI虽然使程序员得到了一定程度的解脱,但是其编程方式仍很麻烦。譬如,显示一张位图,程序员需要进行

"装入位图―读取位图文件头信息―启用设备场景―调色板变换"等一连串操作。而有了GDI+,这些问题便迎刃

而解了。

  顾名思义,GDI+是GDI的增强版。它是微软在Windows 2000以后操作系统中提供的新接口,其通过一套部署为

托管代码的类来展现,这套类被称为GDI+的"托管类接口"。GDI+主要提供了以下三类服务:

  (1) 二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构体)、存储图形基元绘制方式信息的类以

及实际进行绘制的类;

  (2) 图像处理:大多数图片都难以划定为直线和曲线的集合,无法使用二维矢量图形方式进行处理。因此,

GDI+为我们提供了Bitmap、Image等类,它们可用于显示、操作和保存BMP、JPG、GIF等图像格式。

  (3) 文字显示:GDI+支持使用各种字体、字号和样式来显示文本。

  GDI接口是基于函数的,而GDI+是基于C++类的对象化的应用程序编程接口,因此使用起来比GDI要方便。

GDI(Graphics Deveice Interface,图形设备接口),利用GDI编程,可以不考虑硬件的具体特性,直接调用

Windows API中的图形处理函数处理当前DC即可。这的确很方便,但却是以降低处理速度为代价。因为它不能直

接访问硬件,需要通过操作系统间接访问。
Microfost 为迎合市场需求,推出了DirectX。它既能像Windows GDI一样使用方便,又可以直接对硬件抽象层

HALL(Hardware Abstranaction Layer)操作,速度比GDI快得多。DirectX 主要包括 DirectDraw Direct3D

DirectMusic DirectPaly DirectInput DirectSetup七部分。
也就是说DirectX是GDI的升级。

虽然两者都可以用来2D绘图,但差别还是很大的。

DirectDraw的功能上要远远大于GDI,因为DirectDraw多用于游戏开发,GDI或GDI+多用于软件开发。绘图功能

就可想而知了。
而且GDI是用于Windows底层API作为基本绘图方法,比如Windows中的窗口都是GDI输出的,如果你学过SDK(API)

编程的化,对此会很熟悉,比如你看看任务管理器的进程,几乎所有进程都需要加载一个重要的dll,那就是“

gdi32.dll”.
而directdraw则多用于游戏中或媒体中,用于对图形操作更细腻的领域,当然目前更广泛的技术是Direct3D或

OpenGL,当然directdraw也是DirectX中不可缺少的一部分。
总结一下。windows系统的绘图要求并不高,因此gdi是这里的老大,但对于专业的游戏或图形开发商,微软有

创造了DirectX(其中包括directdraw)来满足他们的要求。

GDI为计算机用户和计算机硬件之间提供了一个抽象层,在此层的基础上,用户可以通过简单的调用Win32的图

形函数进行图形显示。
GDI的一大缺憾就是,它不是为具有高表现力的多媒体软件和游戏而设计的,设计者们开发它的主要用途是运行

商业应用软件诸如:Word字处理软件、Excel电子表格、Explorer浏览器等。GDI只提供了访问系统主存的能力

,而不提供直接访问显存的能力,并不能从具有某些加速特性的显卡中获得其优良特性。简而言之,GDI对绝大

多数的商业软件来说是相当完美的,但对于多媒体软件和游戏来说,它却是低速和低效的。
另一方面,DirectDraw可以提供给开发者代表了真实显示内存的绘图页面。这意味着,只要你使用了

DirectDraw,你就可以直接操纵显卡上的内存,图形显示变得出奇的快速。而且这些页面代表了显存中连续的

内存块,使得在页面中寻址和读写变得非常方便。

一句话,DirectDraw就是GDI的升级版 。

ddraw提供了直接显存操作功能,  
  但是对于集成显卡的意义不大,因为它使用的是内存作为显存来使用,显卡和内存之间的通讯是浪费时间的 

 
   
  另外从描述上看你改造后的算法已经不能算作是GDI操作了,而是直接内存地址操作  
   
  因此同样是内存之间的操作,   效率上不会有太大的区别的  
  独立显卡不同,ddraw可以直接操作显存,而gdi或者你的办法是对内存处理,然后从内存copy数据到显存,

自然慢

GDI GDI+ openGL DirectX2009-05-13 19:15DirectX和OPENGL都是一种接口,他们的区别是openGL只涉及图像

方面,而DirectX却涉及显示、声音和网络等方面。

Windows 支持 DirectX 8.0,它能增强计算机的多媒体功能。使用 DirectX 可访问显卡
与声卡的功能,从而使程序可提供逼真的三维 (3D) 图形与令人如醉如痴的音乐与声音效果
。DirectX 是一组低级“应用程序编程接口 (API)”,可为 Windows 程序提供高性能的硬件
加速多媒体支持。

DirectX 使程序能够轻松确定计算机的硬件性能,然后设置与之匹配的程序参数。该程
序使得多媒体软件程序能够在基于 Windows 的具有 DirectX 兼容硬件与驱动程序的计算机
上运行,同时可确保多媒体程序能够充分利用高性能硬件。

DirectX 包含一组 API,通过它能访问高性能硬件的高级功能,如三维图形加速芯片和
声卡。这些 API 控制低级功能(其中包括二维 (2D) 图形加速)、支持输入设备(如游戏杆
、键盘和鼠标)并控制着混音及声音输出。构成 DirectX 的下列组件支持低级功能:

Microsoft DirectDraw

Microsoft DirectDraw API 支持快速访问计算机视频适配器的加速硬件功能。它支持在
所有视频适配器上显示图形的标准方法,并且使用加速驱动程序时可以更快更直接地访问。
DirectDraw 为程序(如游戏和二维图形程序包)以及 Windows 系统组件(如数字视频编解
码器)提供了一种独立于设备之外的方法来访问特定显示设备的功能,而不要求用户提供设
备功能的其它信息。

Microsoft Direct3D

Microsoft Direct3D API (Direct3D) 为大多数新视频适配器内置的 3-D 调色功能提供
界面。Direct3D 是一种低级的 3-D API,它为软件程序提供一种独立于设备之外的方法以便
与加速器硬件进行有效而强大的通信。Direct3D 包含专用 CPU 指令集支持,从而可为新型
计算机提供进一步加速支持。

Microsoft DirectSound

Microsoft DirectSound API 为程序和音频适配器的混音、声音播放和声音捕获功能之
间提供了链接。DirectSound 为多媒体软件程序提供低延迟混合、硬件加速以及直接访问声
音设备等功能。维护与现有设备驱动程序的兼容性时提供该功能。

Microsoft DirectMusic

Microsoft DirectMusic API 是 DirectX 的交互式音频组件。与捕获和播放数字声音样
本的 DirectSound API 不同,DirectMusic 处理数字音频以及基于消息的音乐数据,这些数
据是通过声卡或其内置的软件合成器转换成数字音频的。DirectMusic API 支持以“乐器数
字界面 (MIDI)”格式进行输入,也支持压缩与未压缩的数字音频格式。DirectMusic 为软件
开发人员提供了创建令人陶醉的动态音轨的能力,以响应软件环境中的各种更改,而不只是
用户直接输入更改。

Microsoft DirectInput

Microsoft DirectInput API 为游戏提供高级输入功能并能处理游戏杆以及包括鼠标、
键盘和强力反馈游戏控制器在内的其它相关设备的输入。

Microsoft DirectPlay

Microsoft DirectPlay API 支持通过调制解调器、Internet 或局域网连接游戏。Dire
ctPlay 简化了对通信服务的访问,并提供了一种能够使游戏彼此通信的方法而不受协议或联
机服务的限制。DirectPlay 提供了多种游说服务,可简化多媒体播放器游戏的初始化,同时
还支持可靠的通信协议以确保重要游戏数据在网络上不会丢失。DirectPlay 8.0 的新功能即
支持通过网络进行语音通信,从而可大大提高基于多媒体播放器小组的游戏的娱乐性,同时
该组件还通过提供与玩游戏的其他人对话的功能而使团体游戏更具魅力。

 

抱歉!评论已关闭.