BufData: OleVariant;
  Pic: Variant;  BufData := VarArrayCreate([0, PicSize - 1], varByte);
  Pic := VarArrayCreate([0, PicWidth - 1, 0, PicHeight - 1], varByte);  for i := 0 to PicWidth - 1 do
  begin
    for j := 0 to PicHeight - 1 do
    begin
      Pic[i, j] := BufData[j * PicWidth + i];
    end;
  end;
由于Pic和BufData都是Variant,所以计算很慢,要328ms(比正常数组计算,只要31ms慢十倍),能不能加快运算

解决方案 »

  1.   

    我是想能不能找出Variant数组的数据区,通过指针直接操作数据,但我不知道这数据区怎么找
      

  2.   

     即然是varByte,就嘗試換個方式吧。變體本身慢這是必然的。
      

  3.   

      BufData: OleVariant; 
      Pic: Variant;   P,P1: Pointer;  BufData := VarArrayCreate([0, PicSize - 1], varByte); 
      Pic := VarArrayCreate([0, PicWidth - 1, 0, PicHeight - 1], varByte);   //for i := 0 to PicWidth - 1 do 
      //begin 
      //  for j := 0 to PicHeight - 1 do 
      //  begin 
      //    Pic[i, j] := BufData[j * PicWidth + i]; 
      //  end; 
      //end;   P := VarArrayLock(BufData);
      P1 := VarArrayLock(Pic);  Move(PAnsiChar(P)^, PAnsiChar(P1)^, PicSize);
      
      VarArrayUnLock(BufData);
      VarArrayUnLock(Pic);
      

  4.   

    爽,太感谢unsigned了,时间只要15ms了
    另外问下:VarArrayLock和VarArrayUnLock的作用是什么,是必须要用吗
      

  5.   

    VarArrayLock:锁定这块内存,相当于独占,效率高;
    VarArrayUnLock:解除锁定;