⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ddbase.htm

📁 DirecetX中文手册
💻 HTM
📖 第 1 页 / 共 4 页
字号:
  </font>
</blockquote>

<blockquote>
  <font FACE="宋体" SIZE="3"><p ALIGN="JUSTIFY">计算机中,一个字节(<font
  FACE="Arial" SIZE="3">Byte</font>)是由<font FACE="Arial" SIZE="3">8</font>个位(<font
  FACE="Arial" SIZE="3">Bit</font>)组成的。位深度指的是用来描述某状态值所使用的计算机位的个数。在<font
  FACE="Arial" SIZE="3">DirectDraw</font>中,通常用位深度来代表位图中的颜色值所使用的位个数,从另一个意义上讲,位深度表示了位图中颜色的丰富程度。</p>
  </font>
</blockquote>

<blockquote>
  <font FACE="宋体" SIZE="3"><font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">1</font>字节等于<font
  FACE="Arial" SIZE="3">8</font>位二进制数,所以一字节所能表达的十进制整数的范围是从<font
  FACE="Arial" SIZE="3">0</font>到<font FACE="Arial" SIZE="3">255</font>,即一字节能且最多只能反映出<font
  FACE="Arial" SIZE="3">256</font>(<font FACE="Arial" SIZE="3">2</font>的<font
  FACE="Arial" SIZE="3">8</font>次方)种不同的状态。在位图中,如果用其中每一种状态代表图象中某一个点的颜色,那么最多可以得到<font
  FACE="Arial" SIZE="3">256</font>种不同的颜色,这就是我们常见的<font
  FACE="Arial" SIZE="3">8</font>位(<font FACE="Arial" SIZE="3">256</font>色)的位图。同理,如果用<font
  FACE="Arial" SIZE="3">1</font>位二进制数来表示某一点的颜色,那么只能得两种(<font
  FACE="Arial" SIZE="3">2</font>的<font FACE="Arial" SIZE="3">1</font>次方)颜色,这就是一幅两位的黑白位图;如果用四位二进制数则产生<font
  FACE="Arial" SIZE="3">16</font>种颜色(<font FACE="Arial" SIZE="3">2</font>的<font
  FACE="Arial" SIZE="3">4</font>次方),这是一幅<font FACE="Arial" SIZE="3">4</font>位(<font
  FACE="Arial" SIZE="3">16</font>色)的位图,用<font FACE="Arial" SIZE="3">24</font>位产生<font
  FACE="Arial" SIZE="3">16M</font>种颜色(<font FACE="Arial" SIZE="3">2</font>的<font
  FACE="Arial" SIZE="3">24</font>次方)等,这就是一幅<font FACE="Arial" SIZE="3">24</font>位真彩位图。由于每幅图形文件都用确定的位数来代表颜色(<font
  FACE="Arial" SIZE="3">1</font>、<font FACE="Arial" SIZE="3">2</font>、<font FACE="Arial"
  SIZE="3">4</font>、<font FACE="Arial" SIZE="3">8</font>、<font FACE="Arial" SIZE="3">16</font>、<font
  FACE="Arial" SIZE="3">24</font>或<font FACE="Arial" SIZE="3">32</font>位),所以我们所见的图片颜色数都为<font
  FACE="Arial" SIZE="3">2</font>的<font FACE="Arial" SIZE="3">n</font>次方(<font
  FACE="Arial" SIZE="3">n=</font>位深度)。</p>
  </font>
</blockquote>

<blockquote>
  <font FACE="宋体" SIZE="3"><p ALIGN="JUSTIFY">显然,一幅图象的位深度越高,那么它所能表现的颜色也越多,色彩也就越丰富。通常,在一般情况下,<font
  FACE="Arial" SIZE="3">8</font>位(<font FACE="Arial" SIZE="3">256</font>色)的图片已可满足需要,但在一些要求高质量图象的场合,<font
  FACE="Arial" SIZE="3">16</font>或<font FACE="Arial" SIZE="3">24</font>位的图象是必须的。当然,颜色位深度的增加,也势必带来所需存储空间的膨胀,没有经过压缩的相同大小的<font
  FACE="Arial" SIZE="3">24</font>位图象所需的存储空间是<font FACE="Arial"
  SIZE="3">8</font>位图象的<font FACE="Arial" SIZE="3">3</font>倍,这也会带来文件读取和操作速度的降低,所以在需要高速度显示图象的场合,使用低位深度的图象是必要的。</p>
  </font><hr>
</blockquote>

<blockquote>
  <font FACE="宋体" SIZE="3"><b><p><a name="5、抖动处理(Dithering)">5、抖动处理(Dithering)</a></p>
  </b><p align="right"></font><font size="3"><a href="#目录">返回目录</a></font><font
  FACE="宋体" SIZE="3"></p>
  </font>
</blockquote>

<blockquote>
  <font FACE="宋体" SIZE="3"><p ALIGN="JUSTIFY">在低位深度的图象中,由于颜色总数的限制,有些颜色无法显示出来,为了模拟出那些颜色以提高显示效果,广泛采用了一种称作抖动处理(<font
  FACE="Arial" SIZE="3">dithering</font>)的方法,也称半色调处理(<font
  FACE="Arial" SIZE="3">Halftoning</font>)。它是指用交替的点图案去模拟在图象中不能使用的颜色的过程。单色图象是最简单的格式,一般由黑色和白色组成,在一些单色图象如黑白照片和有深浅的图案中,会使用各种灰度,这种图象常被称为灰度图象<font
  FACE="Arial" SIZE="3">(Grayscale Image)</font>。由于人眼会把一个很细致的黑白相间的图案解释成灰色,所以灰度图象也可使用单色文件格式,数据仍然可以是黑和白。使用黑色或某一种单色的点获得连续的该色灰度的过程就是抖动处理。抖动处理被更多的用在那些低位数彩色图象文件中,与不采用这种处理相比,它具有更好的显示效果。</p>
  </font><hr>
</blockquote>

<blockquote>
  <b><font face="宋体"><font FACE="宋体" SIZE="3"><p></font><a
  name="6、调色板(Palette)"><font size="3">6、</font></font><font FACE="宋体"
  SIZE="3">调色板(<font FACE="Arial">Palette)</font></a></b></p>
  <p align="right"></font><font size="3"><a href="#目录">返回目录</a></font><font
  FACE="宋体" SIZE="3"></p>
  </font>
</blockquote>
<font FACE="宋体" SIZE="3">

<blockquote>
  <p ALIGN="JUSTIFY">显示器及显示卡与显示器的接口都采用模拟方式来处理色彩,因此,它们都具有几乎无限的色彩显示和传输能力,但主机和显示卡只能用数字方式来表示和处理色彩,在用数字方式表示色彩时,如果要获得更丰富,更细腻的色彩就需要增加色彩的位深度,这就需要更大容量的显示存储器,相应的也就需要更高的处理速度,同时分辨率的提高也对显示存储器的容量提出了很高的要求。</p>
</blockquote>

<blockquote>
  <p ALIGN="JUSTIFY">为了尽量降低对显存的需求,在<font FACE="Arial" SIZE="3">Windows</font>中可以使用一种间接的色彩表示方法,这就是调色板(<font
  FACE="Arial" SIZE="3">Palette</font>)表示法。它的含义是:用一个颜色索引(<font
  FACE="Arial" SIZE="3">Color Index</font>)来代表各个像素点的颜色,而不是直接用红,绿,蓝三基色的亮度值来确定每个像素点的颜色。色彩表(<font
  FACE="Arial" SIZE="3">Color table</font>)是一个包含了若干颜色索引和该索引所对应的真实颜色值的表,这个色彩表就是调色板。</p>
</blockquote>

<blockquote>
  <b><p ALIGN="JUSTIFY"></b>这种方法就好比给学校里的每一个学生规定一个专用的学号,在很多场合,并不需要知道某个同学的实际姓名,只要知道他的学号即可,显而易见,使用学号无疑会给学校的学员管理工作带来了极大的便利。调色板就好比一张记载了学生学号及其姓名的名册,颜色索引值就是学生的学号,<font
  FACE="Arial" SIZE="3">RGB</font>颜色值就是学生的姓名。</p>
</blockquote>

<blockquote>
  <p ALIGN="JUSTIFY">使用调色板的好处就在于:索引值占用较少的数据位<font
  FACE="Arial" SIZE="3">(1</font>、<font FACE="Arial" SIZE="3">2</font>、<font
  FACE="Arial" SIZE="3">4</font>或<font FACE="Arial" SIZE="3">8</font>位<font FACE="Arial"
  SIZE="3">)</font>,而真实颜色值占用较长的数据位<font FACE="Arial" SIZE="3">(24</font>位,即<font
  FACE="Arial" SIZE="3">3</font>字节,分别代表红,绿,蓝三基色的颜色亮度值,从<font
  FACE="Arial" SIZE="3">0</font>到<font FACE="Arial" SIZE="3">255)</font>。由于使用了调色板,既提高了图象显示效率,又减少了对显存的需求。</p>
</blockquote>

<blockquote>
  <p ALIGN="JUSTIFY">调色板的颜色索引主要采用<font FACE="Arial" SIZE="3">4</font>或<font
  FACE="Arial" SIZE="3">8</font>两种位深度:<font FACE="Arial" SIZE="3">4</font>位位深度可有<font
  FACE="Arial" SIZE="3">16</font>种不同取值,对应于显示器的<font FACE="Arial"
  SIZE="3">16</font>色显示模式,这时一屏最多只能显示<font FACE="Arial"
  SIZE="3">16</font>种不同的颜色;<font FACE="Arial" SIZE="3">8</font>位位深度可有<font
  FACE="Arial" SIZE="3">256</font>种不同的取值,对应于显示器的<font
  FACE="Arial" SIZE="3">256</font>色显示模式,一屏最多只能显示<font
  FACE="Arial" SIZE="3">256</font>种颜色。于是,问题就开始出现了,当你在<font
  FACE="Arial" SIZE="3">16</font>色模式下显示一幅<font FACE="Arial" SIZE="3">256</font>色或更高位深度的的图象时,你将会看到本应色彩鲜艳的图片变得面目全飞,罪魁祸首就是调色板,由于它使得同时显示在屏幕上的不同颜色最多只能有<font
  FACE="Arial" SIZE="3">16</font>种(对应于<font FACE="Arial" SIZE="3">16</font>色模式下),于是<font
  FACE="Arial" SIZE="3">Windows</font>首先从图象中挑选了<font FACE="Arial" SIZE="3">16</font>种使用频率最高的颜色指定给调色板,对于所有其它的颜色,从调色板中挑选一个最接近的颜色显示出来。在<font
  FACE="Arial" SIZE="3">256</font>色模式下,要同时显示两幅不同调色板的<font
  FACE="Arial" SIZE="3">256</font>色位图时,也会发生这种图象失真的情况。<b></p>
  </b><hr>
</blockquote>

<blockquote>
  <b><p></font><a name="7、GDI与DirectDraw"><font FACE="Arial" SIZE="3">7</font><font
  size="3">、</font><font FACE="Arial" SIZE="3">GDI</font><font FACE="宋体" SIZE="3"><font
  FACE="宋体">与</font><font FACE="Arial">DirectDraw</a></p>
  </font></b><p align="right"><font size="3"><a href="#目录">返回目录</a></font></p>
</blockquote>

<blockquote>
  <b><p ALIGN="JUSTIFY"></b>在大多数的<font FACE="Arial" SIZE="3">Windows</font>编程中,开发者们使用的是<font
  FACE="Arial" SIZE="3">Win32</font>的函数以获得访问绘图页面的能力,例如,使用<font
  FACE="Arial" SIZE="3">GetDC</font>函数,可以获得设备环境(<font FACE="Arial"
  SIZE="3">DC</font>?/FONT&gt;<font FACE="Arial" SIZE="3">Device context</font>)。在获得设备环境之后,你就可以开始进行对屏幕的绘图了。<font
  FACE="Arial" SIZE="3">Win32</font>的所有图形函数都是由<font FACE="Arial"
  SIZE="3">Windows</font>系统的一个独立完整的模块所提供,这就是图形设备接口(<font
  FACE="Arial" SIZE="3">GDI</font>?/FONT&gt;<font FACE="Arial" SIZE="3">Graphics device 
  interface</font>)。<font FACE="Arial" SIZE="3">GDI</font>为计算机用户和计算机硬件之间提供了一个抽象层,在此层的基础上,用户可以通过简单的调用<font
  FACE="Arial" SIZE="3">Win32</font>的图形函数进行图形显示。</p>
</blockquote>

<blockquote>
  <font FACE="Arial" SIZE="3"><p ALIGN="JUSTIFY">GDI</font>的一大缺憾就是,它不是为具有高表现力的多媒体软件和游戏而设计的,设计者们开发它的主要用途是运行商业应用软件诸如:<font
  FACE="Arial" SIZE="3">Word</font>字处理软件、<font FACE="Arial" SIZE="3">Excel</font>电子表格、<font
  FACE="Arial" SIZE="3">Explorer</font>浏览器等。<font FACE="Arial" SIZE="3">GDI</font>只提供了访问系统主存的能力,而不提供直接访问显存的能力,并不能从具有某些加速特性的显卡中获得其优良特性。简而言之,<font
  FACE="Arial" SIZE="3">GDI</font>对绝大多数的商业软件来说是相当完美的,但对于多媒体软件和游戏来说,它却是低速和低效的。</p>
</blockquote>

<blockquote>
  <p ALIGN="JUSTIFY">另一方面,<font FACE="Arial" SIZE="3">DirectDraw</font>可以提供给开发者代表了真实显示内存的绘图页面。这意味着,只要你使用了<font
  FACE="Arial" SIZE="3">DirectDraw</font>,你就可以直接操纵显卡上的内存,图形显示变得出奇的快速。而且这些页面代表了显存中连续的内存块,使得在页面中寻址和读写变得非常方便。</p>
  <hr>
</blockquote>

<blockquote>
  <b><p><a name="8、位块传送(Blit)">8、位块传送(<font FACE="Arial">Blit</font><font
  FACE="宋体">)</font></a></p>
  </b><p align="right"><font size="3"><a href="#目录">返回目录</a></font></p>
</blockquote>

<blockquote>
  <p ALIGN="JUSTIFY">“<font FACE="Arial" SIZE="3">Blit</font>”是“<font FACE="Arial"
  SIZE="3">Bit block transfer</font>”的缩写,意为“位块传送”。顾名思义,<font
  FACE="Arial" SIZE="3">Blit</font>的作用是:将某一内存块的数据传送到另一内存块,前一内存块被称为“源”,后一内存块被称为“目标”。这里用的是“传送”一词,而不是“复制”,因为在<font
  FACE="Arial" SIZE="3">Blit</font>过程中,数据并不是被原封不动的转移,而是经过了一定的转换。</p>
</blockquote>

<blockquote>
  <ul>
    <li><font color="#FF0000">在许多书籍中或程序中经常可以见到的“Bitblt”、“Blt&quot;或“Bltting”,其实也是同一个意思,前者读作['bitb'lit];后者读作[b'lit]。</font></li>
  </ul>
</blockquote>

<blockquote>
  <p ALIGN="JUSTIFY">在绝大多数情况下,<font FACE="Arial" SIZE="3">Blit</font>操作是针对位图图象的,因此,源数据代表的是“源位图”,目标数据代表的就是“目标位图”。图象程序开发者使用<font
  FACE="Arial" SIZE="3">Blit</font>的函数在内存中将某页面上的一幅位图经过一定的变换转移到另一个页面上。这种变换有很多种,每一种都有一个代码与之对应,我们称该代码为光栅操作代码(<font
  FACE="Arial" SIZE="3">ROP</font>?/FONT&gt;Raster operation code)。</p>
</blockquote>

<blockquote>
  <p ALIGN="JUSTIFY">Blit操作被广泛的用于图形程序中,如在显示位图、移动、复制位图、位图合成、位图特效以及精灵的实现中都有blit的身影。GDI和DirectDraw中,都提供了blit的函数,如GDI中的BitBlt、StretchBlt、PatBlt等,DirectDraw中的IDirectDrawSurface3::Blt和IDirectDrawSurface3::BltFast等。</p>
</blockquote>

<blockquote>
  <p ALIGN="JUSTIFY">下面我们来分析一个典型的Blit的函数,GDI的BitBlt是Win32 
  API中一个重要的函数,关于它的详细资料可以参阅VC中的帮助,位于:Platform,SDK,and 
  DDK Document\Platform SDK\Reference\Functions\Win32 Functions,它的原型如下:<font
  FACE="宋体" SIZE="3" COLOR="#ff0000"></p>
  </font>
</blockquote>
</font>

<blockquote>
  <font FACE="Arial" SIZE="1"><p
  style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2px"></font><font
  color="#FFFFFF">BOOL BitBlt(</font></p>
  <p
  style="background-color: rgb(0,0,128); margin-top: 0; margin-bottom: 0; padding-top: 2px"><font
  color="#FFFFFF">HDC hdcDest, //目标设备环境的句柄</font></p>
  <p

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -