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

Image conversion from TImage to Blob causes image corruption

我目前遇到一个问题,我拍摄了显示在 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 字段,并且在检索时不会损坏?

我确实在某处读到它可能与 blob 的长度有关,但我不确定。

有什么办法可以改善吗?

所以解决方案是从上面的 Oliver 的建议中获取的。我只是将 blob 字段更改为 mediumblob 字段,将最大大小从 64KB 增加到 16MB。多亏了 Olivier