MemoryStreamToOleVariant 的问题,请帮忙,附代码了 ( 积分: 100 )

  • 主题发起人 主题发起人 leeeeleeee
  • 开始时间 开始时间
L

leeeeleeee

Unregistered / Unconfirmed
GUEST, unregistred user!
function TForm1.GetBmp(const filename: WideString): OleVariant;
var Bmp:TBitmap;
mstream : TMemoryStream;
begin
Bmp := TBitmap.Create;
try
Bmp.LoadFromFile(filename);
mstream := TMemoryStream.Create;
try
mstream.Clear;
Bmp.SaveToStream(mstream);
Result := MemoryStreamToOleVariant(mstream)
finally
mstream.Free;
end;
finally
Bmp.Free;
end;
end;
[:(]用下面的过程取出来,可是没有图片或出错,不知错误在哪里[?]
procedure TForm1.Button1Click(Sender: TObject);
var aole : OleVariant;
mstream : TMemoryStream;
Bmp : TBitmap;
begin
//Bmp:=TBitmap.Create;
try
mstream := OleVariantToMemoryStream(GetBmp('d:/a.bmp'));
Image1.Picture.Bitmap.LoadFromStream(mstream);
//Image1.Picture.Bitmap.Assign(Bmp);
finally
//Bmp.Free;
end;
end;

附二个过程
Function MemoryStreamToOleVariant(Strm: TMemoryStream): OleVariant;
Var
Data: PByteArray;
Begin
Result := VarArrayCreate([0, Strm.Size - 1], varByte);
Data := VarArrayLock(Result);
Try
Strm.Position := 0;
Strm.ReadBuffer(Data^, Strm.Size);
Finally
VarArrayUnlock(Result);
End;
End;

Function OleVariantToMemoryStream(OV: OleVariant): TMemoryStream;
Var
Data: PByteArray;
Size: integer;
Begin
Result := TMemoryStream.Create;
Try
Size := VarArrayHighBound(OV, 1) - VarArrayLowBound
(OV, 1) + 1;
Data := VarArrayLock(OV);
Try
Result.Position := 0;
Result.WriteBuffer(Data^, Size);
Finally
VarArrayUnlock(OV);
End;
Except
Result.Free;
Result := Nil;
End;
End;
 
function TForm1.GetBmp(const filename: WideString): OleVariant;
var Bmp:TBitmap;
mstream : TMemoryStream;
begin
Bmp := TBitmap.Create;
try
Bmp.LoadFromFile(filename);
mstream := TMemoryStream.Create;
try
mstream.Clear;
Bmp.SaveToStream(mstream);
Result := MemoryStreamToOleVariant(mstream)
finally
mstream.Free;
end;
finally
Bmp.Free;
end;
end;
[:(]用下面的过程取出来,可是没有图片或出错,不知错误在哪里[?]
procedure TForm1.Button1Click(Sender: TObject);
var aole : OleVariant;
mstream : TMemoryStream;
Bmp : TBitmap;
begin
//Bmp:=TBitmap.Create;
try
mstream := OleVariantToMemoryStream(GetBmp('d:/a.bmp'));
Image1.Picture.Bitmap.LoadFromStream(mstream);
//Image1.Picture.Bitmap.Assign(Bmp);
finally
//Bmp.Free;
end;
end;

附二个过程
Function MemoryStreamToOleVariant(Strm: TMemoryStream): OleVariant;
Var
Data: PByteArray;
Begin
Result := VarArrayCreate([0, Strm.Size - 1], varByte);
Data := VarArrayLock(Result);
Try
Strm.Position := 0;
Strm.ReadBuffer(Data^, Strm.Size);
Finally
VarArrayUnlock(Result);
End;
End;

Function OleVariantToMemoryStream(OV: OleVariant): TMemoryStream;
Var
Data: PByteArray;
Size: integer;
Begin
Result := TMemoryStream.Create;
Try
Size := VarArrayHighBound(OV, 1) - VarArrayLowBound
(OV, 1) + 1;
Data := VarArrayLock(OV);
Try
Result.Position := 0;
Result.WriteBuffer(Data^, Size);
Finally
VarArrayUnlock(OV);
End;
Except
Result.Free;
Result := Nil;
End;
End;
 
GetBmp?那个函数?没看出你哪有传入olevariant类型的数据啊。
 
mstream := OleVariantToMemoryStream(GetBmp('d:/a.bmp'));
mstream.Position := 0; //////////////////////////
Image1.Picture.Bitmap.LoadFromStream(mstream);
 
对对对对对!!!!我猪啊,哈哈,谢谢!
 
后退
顶部