var
  lpRGBQuad : ^TRGBQuad;
  lpBmpImageData : ^TBitmapInfoHeader;  //如何类型转换?
  lpRGBQuad := TRGBQuad(lpTempBmpImageData);

解决方案 »

  1.   

    lpRGBQuad := TRGBQuad(lpTempBmpImageData^);
      

  2.   

    lpRGBQuad := TRGBQuad(lpTempBmpImageData^);
      

  3.   

    是的,两种不同的结构体。Windows GDI 的。
    lpTempBmpImageData指向了位图内存,经过指针运算后指针下移,赋给调色板指针lpRGBQuad,让它指向自己的起始位置
    如果这样不行,还有其他变通吗?
      

  4.   

    lpRGBQuad := pointer(lpTempBmpImageData)
      

  5.   

    唉,我也是看用C就直接转了,才这样试的。
    申请一块内存,用于存放位图数据,位图起始是TBitmapInfoHeader结构体,然后是TRGBQuad结构体,再然后是图像数据。
    先填充了TBitmapInfoHeader结构体,即lpTempBmpImageData 。然后对lpTempBmpImageData进行指针运算,下移,找到TRGBQuad结构体的起始位置,由lpRGBQuad指向。
    lpRGBQuad := TRGBQuad(lpTempBmpImageData^); 就是想给lpRGBQuad赋值,找到TRGBQuad结构体的起始位置。
      

  6.   

    寻址的话,先转Pointer,再转Integer,然后就可以进行地址运算了。如果直接指针地址赋值,就用avan_lau的方法。指向区域是否有效,取决于这两种类型的内存结构是否完全相同。
      

  7.   

    指针运算必须转为Integer吗?
    我在做lpTempBmpImageData指针运算时也这样做的:
    Inc(PByte(lpTempBmpImageData), SizeOf(TBitMapInfoHeader));  
    这样有问题吗?
      

  8.   

    Inc也可以,但是如果碰到要用乘法的时候就要转整数了
      

  9.   

    我先去试试。谢谢啊
    能不能推荐一些这方面的资料?我找到的资料,讲Pascal语法篇幅很少,指针都是一笔带过。这些东西我都没在书上看到过