从TImage到Blob的图像转换会导致图像损坏

问题描述

我目前遇到一个问题,我要拍摄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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...