问题描述
我目前遇到一个问题,我要拍摄TImage
组件中显示的图像,将其转换并将其存储在BLOB字段中。现在,我知道这不是一个优化的解决方案,但就我的目的而言,这很好。不会存储大量图像。
图像被保存到MySQL数据库的Blob字段中。问题出在我想再次在TImage
组件中显示图像时,它只显示图像的一半,底部却以某种方式损坏。
以下是插入数据库的代码:
image1.Picture.LoadFromFile(fileName);
if image1.Picture.Graphic <> nil then
begin
Field := TBlobField(database.qDBImages.FieldByName('image_one'));
stream_one := database.qDBImages.CreateBlobStream(Field,bmWrite);
try
image1.Picture.Graphic.SaveToStream(stream_one);
ShowMessage('we are saving to stream');
finally
database.qDBImages.Post;
stream.Free;
end;
现在,当我不得不将值显示回TImage
时,问题就来了,然后它被损坏了。这是显示图像的代码:
var
Field : TBlobField;
Stream : TStream;
Jpg : TJPEGImage;
begin
database.qDBImages.Active := true;
if database.qDBImages.Active then
begin
Field := TBlobField(database.qDBImages.FieldByName('image_one'));
Stream := database.qDBImages.CreateBlobStream(Field,bmRead);
Jpg := TJPEGImage.Create;
try
Jpg.LoadFromStream(Stream);
Image1.Picture.Graphic := Jpg;
finally
Jpg.Free;
Stream.Free;
end;
end;
还有其他方法可以将图像转换为blob字段,并且在检索时不会损坏吗?
我确实读过某个地方,这可能与斑点的长度有关,但我不确定。
有什么办法可以改善这一点?
解决方法
因此,解决方案摘自Oliver的建议。我只是将blob字段更改为mediumblob字段,将最大大小从64KB增加到16MB。非常感谢Olivier