关于DELPHI中位图操作的问题(200分)

  • 主题发起人 主题发起人 ge
  • 开始时间 开始时间
G

ge

Unregistered / Unconfirmed
GUEST, unregistred user!
WINDOWS的一个位图结构如下:
typedef struct tagBITMAPINFO { // bmi
BITMAPINFOHEADER bmiHeader

RGBQUAD bmiColors[1]

} BITMAPINFO


为什么在VC中就可以进行如下操作:
for( int k = 0
k < 256
++k){
BMIInfo->bmiColors[k].rgbBlue = (BYTE)k

BMIInfo->bmiColors[k].rgbGreen = (BYTE)k

BMIInfo->bmiColors[k].rgbRed = (BYTE)k

BMIInfo->bmiColors[k].rgbReserved = 0

}
但是明明bmiColors是[1],

在DELPHI中没法进行如上操作,K大于1它就出错!
这是怎么回事?
 
gejianye也是你吧?
 
肯定是同一个人
 
是不是C语言不进行数组的边界检查
 
type
arrayTRGBQuad=array[0 .. MAXINT div 8] of TRGBQuad;
var
bmpinfo:PBITMAPINFO;


arrayTRGBQuad((@bmpinfo^.bmiColors)^)[这里可以大于1].rgbBlue:=0;

 
怎么编译过不去?
报错说:invalid typecast
 
很多个小 ^ 号你会不会漏了?

你用剪贴板, copy 、 paste 就不会错了
 
vc中这样做是为了设置调色板。24位位图不用调色板的。
bmiColor[]是一个颜色表,用于说明位途中的颜色,它由若干的表项,每一表项是一个rgbquad
类型的结构,定义了一种颜色。
bmicolo表项个数由biBitCount来定:
当bibitcount=1、4、8时,bmicolor分别有2,16,256个表项。若某点的像素值为:n,
则该像素的颜色为bmicolor[n]定义的颜色。
当bibitcount=24时,bmicolor的表项为空。
 
接受答案了.
 
后退
顶部