定义如下: 
YData[c][d]:array of array of Byte;
HimgData[a][b]:array of array of Byte;YData[c][d]:=(299*HimgData[a][b]+587*HimgData[a][b+1]+114*HimgData[a][b+2])div 1000;//可为什么运行的时候这行会出错是类型出问题吗?还是其他?

解决方案 »

  1.   

    div两边操作数都需要integer类型,
    我没尝试,你看行不行
    YData[c][d]:=Byte(integer((299*HimgData[a][b]+587*HimgData[a][b+1]+114*HimgData[a][b+2]))div 1000);//
      

  2.   

    楼主假如要的是整数的话,何不在定义数组时就定义成integer型呢
      

  3.   

    错误类型是这样的:Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 0045A7C2 in module 'Project1.exe'.read of address E16AC0e3',Process stopped .Use Step or Run to continue.(是运行是显示的)
    :
    因为我定义的数组是用来做图象处理的,对8位图来说,一个字节类型刚好呀,而要换成integer 就挺麻烦的.
    我也按:YData[c][d]:=Byte(integer((299*HimgData[a][b]+587*HimgData[a][b+1]+114*HimgData[a][b+2]))div 1000);的方法调试了,结果错误是一样的,不知道为什么?
      

  4.   

    我把跟这段有关的代码都贴出来,应该是这个问题吧,但我应该怎么改呢?c:=0;
    d:=0;
    b:=-2;
    setlength(YData,imgsize );
    setlength(UData,imgsize );
    setlength(VData,imgsize );
    for a:=0 to (LineBytes-1) do
    begin
    for b:=b+2 to (bi.biHeight-1)do
    begin
    YData[c][d]:=Byte((299*integer(HimgData[a][b])+587*integer(HimgData[a][b+1])+114*integer(HimgData[a][b+2])) div 1000);
    UData[c][d]:=Byte((-169*integer(HimgData[a][b])-331*integer(HimgData[a][b+1])+500*integer(HimgData[a][b+2]))div 1000);
    VData[c][d]:=Byte((500*integer(HimgData[a][b])-419*integer(HimgData[a][b+1])-81*integer(HimgData[a][b+2]))div 1000);
    inc(d);
    end;
    inc(c);