在 delphi 处出现访问冲突错误,而 saving/loading 图像 to/from 流
Access violation error at delphi while saving/loading image to/from stream
我正在 delphi 开发应用程序。我正在尝试提取保存在数据库中的图像,将其保存到 TMemoryStream
并在放置在将动态填充的其他表单上的 TImage
控件上加载相同的图像。当我尝试将图像从流加载到放置在表单上的图像控件时,出现 access violation 错误。
错误描述如下
Access violation at address 00B548C in module abc.exe. Read of address 0000000
我的代码片段如下
UniConnection1.Connected := true;
UniQuery2.SQL.Text := 'Select image from userplays where id = :id';
UniQuery2.Params.ParamByName('id').Value := idpub1;
UniQuery2.Open;
if UniQuery2.FieldByName('image').AsString <> '' then
begin
try
Stream121 := TMemoryStream.Create;
TBlobField(UniQuery2.FieldByName('image')).SaveToStream(Stream121);
Stream121.Position := 0;
if Assigned(Stream121) then
begin
Image1.Picture.Graphic.LoadFromStream(Stream121);
Image1.Update;
end;
finally
Stream121.Free;
end;
end;
TPicture
无法判断流中的图形类型,所以你必须提前告诉它。如果您只有 JPEG 图像,则可以对其进行硬编码。否则你也应该将图像格式存储在数据库中。
var
graphic: TGraphic;
Stream121.Position := 0;
if Stream121.size > 0 then begin
graphic := TJPEGImage.Create;
try
graphic.LoadFromStream(Stream121);
Image1.Picture.Graphic := graphic;
finally
graphic.Free;
end;
end;
您指的是 Graphic.LoadfromStream。但是 Graphic 可能不(可能不会)存在。您可以保存到文件并使用 Picture.LoadFromFile 代替(因为这将创建适当的 TGraphic 后代)或首先创建 Picture.Graphic 作为适当的类型(例如 TBitmap)。
Picture.Graphic := TBitMap.Create;
就目前情况而言,图像不知道您的数据采用何种图形格式。您需要以某种方式告诉它。
我正在 delphi 开发应用程序。我正在尝试提取保存在数据库中的图像,将其保存到 TMemoryStream
并在放置在将动态填充的其他表单上的 TImage
控件上加载相同的图像。当我尝试将图像从流加载到放置在表单上的图像控件时,出现 access violation 错误。
错误描述如下
Access violation at address 00B548C in module abc.exe. Read of address 0000000
我的代码片段如下
UniConnection1.Connected := true;
UniQuery2.SQL.Text := 'Select image from userplays where id = :id';
UniQuery2.Params.ParamByName('id').Value := idpub1;
UniQuery2.Open;
if UniQuery2.FieldByName('image').AsString <> '' then
begin
try
Stream121 := TMemoryStream.Create;
TBlobField(UniQuery2.FieldByName('image')).SaveToStream(Stream121);
Stream121.Position := 0;
if Assigned(Stream121) then
begin
Image1.Picture.Graphic.LoadFromStream(Stream121);
Image1.Update;
end;
finally
Stream121.Free;
end;
end;
TPicture
无法判断流中的图形类型,所以你必须提前告诉它。如果您只有 JPEG 图像,则可以对其进行硬编码。否则你也应该将图像格式存储在数据库中。
var
graphic: TGraphic;
Stream121.Position := 0;
if Stream121.size > 0 then begin
graphic := TJPEGImage.Create;
try
graphic.LoadFromStream(Stream121);
Image1.Picture.Graphic := graphic;
finally
graphic.Free;
end;
end;
您指的是 Graphic.LoadfromStream。但是 Graphic 可能不(可能不会)存在。您可以保存到文件并使用 Picture.LoadFromFile 代替(因为这将创建适当的 TGraphic 后代)或首先创建 Picture.Graphic 作为适当的类型(例如 TBitmap)。
Picture.Graphic := TBitMap.Create;
就目前情况而言,图像不知道您的数据采用何种图形格式。您需要以某种方式告诉它。