16位模式下“555”的问题-游戏开发-编程文档-人才家园--中国人才库
您所在的位置:中国人才库--人才家园--编程文档--游戏开发
16位模式下“555”的问题
来源: 编辑:duliying 更新日期:2008-5-23 11:12:05 浏览:400 次
当我开始使用DirectX,我决定不再使用旧的256色模式,而是直接开始改用16位模式。有千万种的颜色可使用
是多么的令人愉快。
  我买了一本很好的书去学习怎么使用C++和DirectX。我做的第一件事是写一个在屏幕上显示一些点的程序。当
它在另一台计算机运行时,我发现屏幕上所有的颜色都错了!所有的颜色都偏绿了。到底是哪里出错了?一个朋友
告诉我有些图形卡使用了不同的16位模式。
  书的作者也提及了这个问题。在他的例子中, 他使用了#define定义RGB值为WORD。这个#define假定图形模式
为555 。这意味着在WORD中的每各通道都用5位剩余的1位不使用。其它的卡使用565模式。(我不知道是否还有其它
的模式,但我写的例程还未发现过问题。)
  在高彩模式下,我们用一个WORD来表示一个像素。但由于显卡的差异, 通常会有555和565两种情况。
  555是指颜色表示的RGB分量各占5位,如图: N R R R R R G G G G G B B B B B   565是指颜色表示的RB分量各占5位,G分量占6位,如图:
R R R R R G G G G G G B B B B B   书中的#define看起来就象:
   #define _RGB16BIT (r, g, b) ( (b % 32) + ( (g % 32) << 5)+( (r % 32) << 10))
  如果忘了它,而使用恒值555将不能保证在所有的计算机上正常工作。幸运的是,有一个DX函数可以返回DWORD
s 简要地说明了颜色模式(以及一些其它资料)。
  这个函数的语法格式是:HRESULT GetpixelFormat(DDPIXELFORMAT x)
  如果你想知道绿色用了几位, 你可以查看DWORD中绿色通道设置为几位。因此我写了下面的函数。
  使用这个函数必须定义四个全局变量:
  DWORD redbits, greenbits, bluebits, rgbbits;
  bool MyGetPixelFormat()
  {
    // init the vars:
    redbits = greenbits = bluebits = rgbbits = 0;
    // the PixelFormat structure:
    DDPIXELFORMAT DDPixelFormat;
    DDPixelFormat.dwSize = sizeof(DDPIXELFORMAT); // don‘t forget this!     // fill the pixel-format structure:
    if (lpddsprim
 第1页/总3页  第一页 上一页 下一页 最后一页     【发表评论】
昵   称:  (不填写则显示为匿名)
标   题:
内   容:
 
免责声明:网友对此资源信息的评论仅代表个人观点,中国人才库有权删除违乱评论信息!
石家庄广通印刷学校