关于DELPHI中对位图操作的问题

gejianye 2000-03-17 04:05:00
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它就出错!
这是怎么回事?
...全文
141 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hubdog 2000-03-17
  • 打赏
  • 举报
回复
var
bmpinfo:PBitmapInfo;
infosize:integer;
i:Integer;
begin
infosize:=SizeOf(TBitmapInfoHeader)+SizeOf(TRGBQuad)*256;//对256色来说
getmem(bmpinfo,infosize);
for i:=0 to 255 do
begin
bmpinfo^.bmiColors[i].rgbBlue := k;
bmpinfo^.bmiColors[i].rgbred := k;
.....
end;
.....
freemem(bmpinfo);
end;
其实,c++可以那样写是因为它支持动态数列,
而pascal必须事先分配内存,这点来说pascal很讨厌:(
分都给我吧,大家别和我抢

gejianye 2000-03-17
  • 打赏
  • 举报
回复
为什么VC中就一点没事呢?
上述的结构是WINDOWS内部的结构,VC中付了256次值怎么就不会崩溃?
kxy 2000-03-17
  • 打赏
  • 举报
回复
VC中没有边界检查,
delphi 中把Project->options中check range out 去掉也不会报错,
但是,这样写是疯了:)你的程序会莫名其妙的崩溃.

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧