从 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
我目前遇到一个问题,我拍摄了显示在 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