请输入您要查询的百科知识:

 

词条 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栏位。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/12/23 0:06:49