VC代码为:
CString path="c:\\1.jpg";
CFile myFile;
byte* data;
if(myFile.Open(path, CFile::modeRead | CFile::typeBinary))
{
UINT filelen=myFile.GetLength();
data = new byte[filelen];
_variant_t outData;
UINT dw=myFile.Read(data,filelen);
if (dw==filelen)
{

theApp.buffer->ByteToVariant(data,filelen,&outData);
myFile.Close();
int x0,x1,y1,y0;
BOOL ok1=theApp.face->FindFace(outData,&x0,&x1,&y0,&y1);
}
}
其中 ByteToVariant 函数为:void CImageBuffer::ByteToVariant(byte *bData, long bSize, VARIANT *pOutAarry)
{
SAFEARRAY* psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements =bSize;
psa = SafeArrayCreate(VT_UI1, 1, rgsabound);

for (long i = 0; i <bSize; i++)
SafeArrayPutElement (psa, &i,bData++);
pOutAarry->vt = VT_ARRAY | VT_UI1;
pOutAarry->parray = psa;}

解决方案 »

  1.   

    单纯的将图片内容转换成Variant类型使用下面的代码就可以了
    var
      Stream: TMemoryStream;
      p: pointer;
      v: OleVariant;
    begin
      Stream:= TMemoryStream.Create;
      try
        Stream.LoadFromFile( 'c:\123.jpg' );
        Stream.Seek(0,0);
        v := VarArrayCreate ([0, Stream.Size - 1], varByte);
        p := VarArrayLock (v);
        Stream.Position := 0;
        Stream.Read (p^, Stream.Size);
        VarArrayUnlock (v);
      finally
        Stream.Free;
      end;
    end;
      

  2.   

    >>theApp.face-> FindFace(outData,&x0,&x1,&y0,&y1); 这里是做什么的,我的理解是获得一个图片的某个区域,如果要是这样的话,你是使用GDI+来实现非常的方便
      

  3.   

    to :Delphi(Pascal) code 这个我会。
    to :hongqi162 
      有一个用VC写的ActiveX组件,文件为xxx.dll ,通过Delphi加载组件后,自动生成了xxx_TBL.PAS 单元文件,其中组件有函数为 FindFace(aImage:oleVariant;a1,a2,b1,b3:Integer)  ,通过沟通后,对方告诉我:aImage为二进制Byte数组。
    我已经写函数进行了转换,如下,但是在调用FindFace还是不正确,对方给了代码如上,如何将其转换?
    function   ByteToOleVariant(Strm:   Array   of   byte   ):   OleVariant; 
    var 
        Data:   PByteArray; 
        i   :integer; 
    begin 
        Result   :=   VarArrayCreate([0,   Length(Strm)-1],   varByte); 
        Data   :=   VarArrayLock(Result); 
        try 
          for   i:=0   to   Length(Strm)-1   do 
                  Data^[i]:=Strm[i]   ; 
        finally 
            VarArrayUnlock(Result); 
        end; 
    end;