如题
解决方案 »
- ADOQuery的一些问题
- ClientDataset 使用更新或删除语句出错.请问如何解决
- 如何把WIN2000传真服务接收下来的TIF格式图片转成BMP?
- 如何实现管理权限!100分!
- 大家过年好!问个弱智的问题,送分25!
- 建立自已的控件InStall時的出錯信息,[Fatal Error]MyMemo.pas[6]:Internal Error:URW3010,為什麼?
- 去掉TWebBroeser那讨厌的滚动条啊、边框啊等等?
- 哪本书详细讲解Delphi的流系统?
- 分用完了,可还有一大堆的问题,谁行行好,帮我看看,都很简单的
- 如何显示数据库中的GIF图像
- 求助,帮帮忙啊!!
- 用Delphi5的BDE(Midas)能连上ORACLE9i吗?
var
Stream_Data:TMemoryStream;
Any_Data:OleVariant;
begin
Stream_Data := TMemoryStream.Create;
try
Image1.Picture.Graphic.SaveToStream(Stream_Data);
Stream_Data.Position := 0;
Stream_Data.Read(Any_Data,Stream_Data.Size);
finally
Stream_Data.Free;
end;
end;上面的代码可以是把TMemoryStream保存到OleVariant,但是保存之后,系统报错
'access volation at 0x77f8af26:write of address 0x00030ff8'的错误,我不知道是什么原因,我现在也急需要解决这个问题,谁能解决,我给他加200分。
我在调试的时候,一直到TForm1.Button1Click(Sender: TObject)执行完了后才报错。请高手指点。
var
Stream_Data:TMemoryStream;
Any_Data:OleVariant;
begin
Stream_Data := TMemoryStream.Create;
try
image1.Picture.Bitmap.SaveToStream(stream_data);
Stream_Data.Position := 0;
Stream_Data.Read(Any_Data,Stream_Data.Size);
finally
Stream_Data.Free;
end;
end;
Stream_Data:TMemoryStream;
Any_Data:OleVariant;
begin
Stream_Data := TMemoryStream.Create;
try
Image1.Picture.Graphic.SaveToStream(Stream_Data);
Any_Data := VarArrayCreate( [0, Stream_Data.Size ], varByte);
Stream_Data.Read(Any_Data,Stream_Data.Size);
finally
Stream_Data.Free;
end;
end;
http://www.glennstephens.com.au/ActiveXServerObjects.doc
中的第16页的代码。
ov : olevariant;
s : TMemoryStream;
p : pointer;
begin
s := TMemoryStream.Create;
....
ov := VarArrayCreate([0, s.Size - 1], varByte);
p := VarArrayLock(ov);
try
S.Position := 0; //start from beginning of stream
S.Read(p^, S.Size);
finally
VarArrayUnlock(Result);
end;
end;
var
db_Stream:TMemoryStream;
bmp:TBitmap;
temp_jpeg:TJPEGImage;
size :integer;
begin
if not imgedit1.ImageDisplayed then
begin
MessageBox(self.Handle,'没有图象可保存','提示',MB_ICONSTOP);
Result := -1;
exit;
end;
db_Stream := TMemoryStream.Create;
temp_jpeg := TJPEGImage.Create;
bmp := Tbitmap.Create;
//拷贝图象到粘贴板
ImgEdit1.ClipboardCopy(0,0,ImgEdit1.Width,ImgEdit1.Height);
//打开粘贴板
Clipboard.Open;
//装入图象到位图实例
bmp.LoadFromClipBoardFormat(CF_BitMap,ClipBoard.GetAsHandle(cf_BitMap),0);
//关闭粘贴板
ClipBoard.Close;
ClipBoard.Clear;
//把位图对象赋给JPEG图象格式文件
temp_jpeg.Assign(bmp);
//把JPEG图象格式文件保存到流
temp_jpeg.SaveToStream(db_Stream);
//得到流的大小
Size := db_Stream.Size;
if Size = 0 then
begin
Result := 0;
exit;
end;
try
try
db_Stream.Position := 0;
//给存放流数据的指针分配内存
Blob_Data := Allocmem(size);
//读流的数据到变量
size := db_Stream.Read(Blob_Data^,size);
if size < 1 then
begin
showmessage('读流数据错误');
FreeMem(Blob_Data,size);
Result := -1;
exit;
end;
finally
bmp.Free;
temp_jpeg.Free;
db_Stream.Free;
Result := size;
end;
except
Result := -1;
end;
end;