用delphi作数字图像处理,由于图像大小未知所以要动态分配
在c++中可以用
   int* pImage;
   ...
   X=..;
   Y=..;
   size=X*Y;
   ...
   pImage=new int[size];
delphi中如何实现该功能?用动态数组吗?该方法是否会影响效率?

解决方案 »

  1.   

    pImage:PInteger;
    begin
        getmem(pImage,sizeof(integer)*size);
      

  2.   

    这样也行。
    pImage:Array of integer;SetLength(pImage,size);
      

  3.   

    如果用PInteger来指向image那如何引用pImage呢,好像delphi中的指针不能执行pImage+1等操作
    另问
    var
      a:PByteArray;
    begin
      a:=AllocMem(2);
      那么到底分配了多少内存?是2还是32767?
    在delphi中PByteArray定义如下:
        PByteArray = ^TByteArray;
        TByteArray = array[0..32767] of Byte;
      

  4.   

    如果用PInteger来指向image那如何引用pImage呢,好像delphi中的指针不能执行pImage+1等操作//////////////////可以的,方法如下:
    PInteger(integer(pImage)+i)^
      

  5.   

    PInteger(integer(pImage)+i)是指将实际地址值加i再转换为指针?
    那移动一个整型数应该是integer(pImage)+i*4啊?有点糊涂了请指教
      

  6.   

    用Inc...會自動增加需要得步長得。。
      

  7.   

    谢谢,觉的用Inc比较麻烦
    delphi中好像不能向c++那样直接对指针进行加减来访问内存,Inc是改变指针变量自身的值来实现内存访问,所以首先还要保存首地址,否则首地址就丢失了。
    如c++代码
    int* p1;
    int i,j;
    p1=new int[100];
    for(i=0;i<10;i++)
      for(j=0;j<10;j++)
        *(p1+i*10+j)=255;在delphi中用Inc要
    var
      p1,p2:PInteger;
      i,j:integer;
    begin
      p1:=AllocMem(sizeof(integer)*100);
      p2:=p1;
      for i:=0 to 9 do
         for j:=0 to 9 do
         begin
           Inc(p1,i*10+j);
           p1^:=255;
           p1:=p2;
         end;
    end.
    小弟初学,各位大哥指点一下啊,是不是这样理解的?有更简便的方法实现上面的C++代码的功能吗?
        
      
      

  8.   

    gzmhero(hihihi)的方法似乎是最好的了,呵呵,实际上就等于自己手工实现了C++中的指针加减运算
      

  9.   

    var  
       a:PByteArray;  
    begin  
       a:=AllocMem(2);  
       那么到底分配了多少内存?是2还是32767?  
    在delphi中PByteArray定义如下:  
           PByteArray  =  ^TByteArray;  
           TByteArray  =  array[0..32767]  of  Byte; 
    这个问题有人知道么?到底怎么分配的啊?