新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论高级C/C++编程、代码重构(Refactoring)、极限编程(XP)、泛型编程等话题
    [返回] 计算机科学论坛计算机技术与应用『 C/C++编程思想 』 → DIBSTRUCT结构 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 3083 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: DIBSTRUCT结构 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     卷积内核 帅哥哟,离线,有人找我吗?
      
      
      威望:8
      头衔:总统
      等级:博士二年级(版主)
      文章:3942
      积分:27590
      门派:XML.ORG.CN
      注册:2004/7/21

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给卷积内核发送一个短消息 把卷积内核加入好友 查看卷积内核的个人资料 搜索卷积内核在『 C/C++编程思想 』的所有贴子 访问卷积内核的主页 引用回复这个贴子 回复这个贴子 查看卷积内核的博客楼主
    发贴心情 DIBSTRUCT结构

    DIBHELP.C档案-如此命名是因为对处理DIB提供帮助-有上千行,并在几个小部分中显示。但是首先让我们看一下DIBHELP函式所处理的结构,该结构在DIBHELP.C中定义如下:

    typedef struct
    {
                 PBYTE            * ppRow ;       // array of row pointers
                 int                iSignature ;          // = "Dib "
                 HBITMAP            hBitmap ;             // handle returned from CreateDIBSection
                 BYTE             *         pBits ;     // pointer to bitmap bits
                 DIBSECTION         ds ;                  // DIBSECTION structure
                 int                iRShift[3] ;          // right-shift values for color masks
                 int                iLShift[3] ;          // left-shift values for color masks
    }
    DIBSTRUCT, * PDIBSTRUCT ;
    现在跳过第一个栏位。它之所以为第一个栏位是因为它使某些巨集更易於使用-在讨论完其他栏位以後再来理解第一个栏位就更容易了。

    在DIBHELP.C中,当DIB建立的函式首先设定了此结构时,第二个栏位就设定为文字字串「Dib」的二进位值。通过一些DIBHELP函式,第二个栏位将用於结构有效指标的一个标记。

    第三个栏位,即hBitmap,是从CreateDIBSection函式传回的点阵图代号。您将想起该代号可有多种使用方式,它与我们在第十四章遇到的GDI点阵图物件的代号用法一样。不过,从CreateDIBSection传回的代号将涉及按装置无关格式储存的点阵图,该点阵图格式一直储存到通过呼叫BitBlt和StretchBlt来将位元图画到输出设备。

    DIBSTRUCT的第四个栏位是指向点阵图位元的指标。此值也可由CreateDIBSection函式设定。您将想起,作业系统将控制这个记忆体块,但应用程式有存取它的许可权。在删除点阵图代号时,记忆体块将自动释放。

    DIBSTRUCT的第五个栏位是DIBSECTION结构。如果您有从CreateDIBSection传回的点阵图代号,那么您可以将代号传递给GetObject函式以获得有关DIBSECTION结构中的点阵图资讯:

    GetObject (hBitmap, sizeof (DIBSECTION), &ds) ;
    作为提示,DIBSECTION结构在WINGDI.H中定义如下:

    typedef struct tagDIBSECTION {
                BITMAP                                     dsBm ;
               BITMAPINFOHEADER         dsBmih ;
               DWORD                    dsBitfields[3] ;    // Color masks
                HANDLE          dshSection ;
                DWORD           dsOffset ;
    }
    DIBSECTION, * PDIBSECTION ;
    第一个栏位是BITMAP结构,它与CreateBitmapIndirect一起建立点阵图物件,与GetObject一起传回关於DDB的资讯。第二个栏位是BITMAPINFOHEADER结构。不管点阵图资讯结构是否传递给CreateDIBSection函式,DIBSECTION结构总有BITMAPINFOHEADER结构而不是其他结构,例如BITMAPCOREHEADER结构。这意味著在存取此结构时,DIBHELP.C中的许多函式都不必检查与OS/2相容的DIB。

    对於16位元和32位元的DIB,如果BITMAPINFOHEADER结构的biCompression栏位是BI_BITFIELDS,那么在资讯表头结构後面通常有三个遮罩值。这些遮罩值决定如何将16位元和32位图素值转换成RGB颜色。遮罩储存在DIBSECTION结构的第三个栏位中。

    DIBSECTION结构的最後两个栏位指的是DIB区块,此区块由档案映射建立。DIBHELP不使用CreateDIBSection的这个特性,因此可以忽略这些栏位。

    DIBSTRUCT的最後两个栏位储存左右移位值,这些值用於处理16位元和32位元DIB的颜色遮罩。我们将在第十五章讨论这些移位值。

    让我们再回来看一下DIBSTRUCT的第一个栏位。正如我们所看到的一样,在开始建立DIB时,此栏位设定为指向一个指标阵列的指标,该阵列中的每个指标都指向DIB中的一行图素。这些指标允许以更快的方式来获得DIB图素位元,同时也被定义,以便顶行可以首先引用DIB图素位元。此阵列的最後一个元素-引用DIB图像的最底行-通常等於DIBSTRUCT的pBits栏位。


       收藏   分享  
    顶(0)
      




    ----------------------------------------------
    事业是国家的,荣誉是单位的,成绩是领导的,工资是老婆的,财产是孩子的,错误是自己的。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/8/29 11:10:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 C/C++编程思想 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/11/23 0:00:40

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    60.001ms