gpt4 book ai didi

json - 如何将 JSON 字符串转换为图像?

转载 作者:行者123 更新时间:2023-12-02 11:04:31 24 4
gpt4 key购买 nike

我有一个将图像转换为 JSON 数组的应用程序,并将其保存到 blob 字段中:

function getImage(): String;
var
memorystream : TMemoryStream;
jsonArray : TJSONArray;

begin
memorystream := TMemoryStream.Create;
myImage.Picture.Graphic.SaveToStream(memorystream);
memorystream.Position := 0;

jsonArray := TJSONArray.Create;
jsonArray := TDBXJSONTools.StreamToJSON(memorystream, 0, memorystream.Size);

memorystream.Free;

Result := jsonArray.ToString;
end;

PNG 图像的转换结果如下所示:

[137,80,78,71,13,10,26,10,0,0, ... ]

此结果存储在一个 blob 字段中,我用以下代码返回该字段:

stream := TStream.Create;
stream := cdsPesquisa.CreateBlobStream(fieldAux, bmRead);
stream.Position := 0;

jsonArray := TJSONArray.Create;
jsonArray := TDBXJSONTools.StreamToJSON(stream, 0, stream.Size);

这里,我在开头有相同的 JSON 字符串 [137,80,78,71,13,10,26,10,0,0, ... ] ,但我需要再次将此 JSON 数组转换为图像。

我怎样才能实现这一目标?

最佳答案

正如 Ken 所建议的,最简单的方法是忘记 JSON 并直接写入 blob 字段。

保存

Stream := TMemoryStream.Create;
try
myImage.Picture.Graphic.SaveToStream(Stream);
Stream.Position := 0;
fieldAux.LoadFromStream(Stream);
finally
Stream.Free;
end;

加载中

Stream := TMemoryStream.Create;
try
fieldAux.SaveToStream(Stream);
Stream.Position := 0;
myImage.Picture.Graphic.LoadFromStream(Stream);
finally
Stream.Free;
end;
<小时/>

您在评论中似乎坚持认为 JSON 就是您所需要的。我觉得有点难以置信。但无论如何,要将保存在字符串中的 JSON 数组转换为图像,请执行以下操作:

jsonArray := TJSONObject.ParseJSONValue(jsonString) as TJSONArray;
try
Stream := TDBXJSONTools.JSONToStream(jsonArray);
try
Stream.Position := 0;
myImage.Picture.Graphic.LoadFromStream(Stream);
finally
Stream.Free;
end;
finally
jsonArray.Free;
end;

此外,据我所知,您调用 TDBXJSONTools.StreamToJSON 的代码不起作用。它生成一个空的 JSON 数组对象。

<小时/>

最后,你的代码像筛子一样泄漏了。您误认为不需要释放您创建的对象。您还错误地实例化对象,然后用不同的对象覆盖新对象,从而泄漏第一个对象。看一下我如何创建对象,并与您的代码进行比较。例如:

jsonArray := TJSONArray.Create ;
jsonArray := TDBXJSONTools.StreamToJSON( memorystream , 0 , memorystream.Size ) ;

在这里,您实例化了一个 TJSONArray 对象,并将对该对象的引用存储在 jsonArray 中。释放该引用是您的工作。但是,当您使用 StreamToJSON 返回的新对象的引用覆盖该引用时,您会立即放弃下一行中的该引用。由于您根本没有释放 jsonArray ,因此您泄漏的不是一个对象,而是两个对象。

您确实需要温习对 Delphi 生命周期管理的基本了解。

关于json - 如何将 JSON 字符串转换为图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16550915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com