词条 | 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栏位。 |
随便看 |
百科全书收录594082条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。