P[x] := y; 是给每行的点像素负值P[j] := HzDzData[i+ 1 * j]; 你的这个语句可能超界了。

解决方案 »

  1.   

    P[j] := HzDzData[i+ 1 * j]; 没有越界,运行错误信息是不让访问P这个地址指针指向的地址空间。   请问P[x]是每一个Bit代表一个像素点,还是一个字节代表一个像素点?
      

  2.   

    代表的是字节的像素点!!看看PByteArray定义就清楚了!!!
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject); var 
    x,y : Integer; 
    BitMap : TBitMap; 
    P : PByteArray; 
    begin 
    BitMap := TBitMap.create; 
    try 
    BitMap.height := 512;
    BitMap.width := 512;
    BitMap.PixelFormat := pf8bit;
    for y := 0 to BitMap.Height -1 do 
    begin 
    P := BitMap.ScanLine[y]; 
    for x := 0 to BitMap.Width -1 do 
    P[x] := y; end; 
    Canvas.Draw(0,0,BitMap); 
    finally 
    BitMap.Free; 
    end; 
    end; 
      

  4.   

    BitMap.PixelFormat 用scanline时是要用这个决定一下你的位格式的。
      

  5.   

    kofxdm(八稚) 说的最到位,是的,开始出错是因为超界了;后来不能正常设置点的显示,是因为PixelFormat没有设置(正确);我看了帮助,没看懂。谢谢各位。回去好好学英语了。  :(