如题

解决方案 »

  1.   

    //==============================================================================procedure Ole2Stream(AVariant: OleVariant; var AStream: TMemoryStream);
    var
      MyBuffer: Pointer;
      size: Integer;
    begin
      AStream.Clear;
      AStream.Seek(0, soFromBeginning);
      size := VarArrayHighBound(AVariant, 1) + VarArrayLowBound(AVariant, 1) + 1;
      MyBuffer := VarArrayLock(AVariant);
      AStream.WriteBuffer(MyBuffer^, size);
      VarArrayUnlock(AVariant);
    end;
    //==============================================================================procedure stream2Ole(AStream: TMemoryStream; var AVariant: OleVariant);
    var
      MyBuffer: Pointer;
    begin
      AStream.Seek(0, soFromBeginning);
      AVariant := VarArrayCreate([0, AStream.size - 1], VarByte);
      MyBuffer := VarArrayLock(AVariant);
      AStream.ReadBuffer(MyBuffer^, AStream.size);
      VarArrayUnlock(AVariant);
    end;
    //==============================================================================
      

  2.   

    注意噢:myBuffer = c语言里面的void * ,至于为什么用Mybuffer^,而不是用myBuffer作为参数,希望你能看看delphi的帮助搞明白
      

  3.   

    一个例子:unit Unit1; interface uses 
      Windows, Messages, SysUtils, Classes, Graphics, Controls,     
      Forms, Dialogs,jpeg, ExtCtrls, StdCtrls,ActiveX, AxCtrls; 
    type 
      TForm1 = class(TForm) 
        Image1: TImage; 
        Button2: TButton; 
        Image2: TImage; 
        procedure Button2Click(Sender: TObject); 
      private 
        procedure StreamToVariant(Stream: TMemoryStream; 
                                  var v:  OleVariant); 
        procedure VariantToStream(const v: olevariant; 
                                  Stream: TMemoryStream); 
        procedure JPEGToVariant(aJPEG : TJPEGImage; 
                                 var aVariant:OleVariant); 
        procedure VariantToJPEG(aValue : OleVariant; 
                                 var aJPEG:TJPEGImage); 
        { Private-Deklarationen } 
      public 
        { Public-Deklarationen } 
      end; var 
      Form1: TForm1; implementation {$R *.DFM} procedure TForm1.VariantToStream (const v : olevariant; Stream : TMemoryStream); 
    var 
      p : pointer; 
    begin 
      Stream.Position := 0; 
      Stream.Size := VarArrayHighBound (v, 1) - VarArrayLowBound (v, 1) + 1; 
      p := VarArrayLock (v); 
      Stream.Write (p^, Stream.Size); 
      VarArrayUnlock (v); 
      Stream.Position := 0; 
    end; procedure TForm1.StreamToVariant (Stream : TMemoryStream; var v : OleVariant); 
    var 
      p : pointer; 
    begin 
      v := VarArrayCreate ([0, Stream.Size - 1], varByte); 
      p := VarArrayLock (v); 
      Stream.Position := 0; 
      Stream.Read (p^, Stream.Size); 
      VarArrayUnlock (v); 
    end; procedure TForm1.JPEGToVariant(aJPEG : TJPEGImage; var aVariant:OleVariant); 
    var 
      Stream        : TMemoryStream; 
    begin 
        try 
          Stream := TMemoryStream.Create;       aJPEG.Assign(Image1.Picture.Bitmap); 
          aJPEG.SaveToStream(Stream);       StreamToVariant(Stream, aVariant); 
        finally 
           Stream.Free; 
       end; 
    end; 
    procedure TForm1.VariantToJPEG(aValue : OleVariant;var aJPEG:TJPEGImage); 
    var 
       Stream : TMemoryStream; 
    begin 
    try 
      Stream := TMemoryStream.Create;   VariantToStream (aValue,Stream); 
      aJPEG.LoadfromStream(Stream); finally 
       VariantClear(aValue); 
       Stream.free; 
    end; 
    end; procedure TForm1.Button2Click(Sender: TObject); 
    var 
       aJPEG :TJPEGImage; 
       aVariant : OleVariant; 
    begin 
    try 
       aJPEG:=TJPEGImage.Create;    //JPEG To Variant 
       aJPEG.Assign(Image1.Picture.Bitmap); 
       JPEGToVariant(aJPEG,aVariant); 
       //Variant To JPEG 
       VariantToJPEG(aVariant,aJPEG); 
       Image2.Picture.assign(aJPEG); 
    finally 
       aJPEG.free; 
    end; 
    end; end.