【问题标题】:Loading Bitmap Failed on Berlin在柏林加载位图失败
【发布时间】:2017-06-05 20:00:10
【问题描述】:

我在将进程从 XE8 迁移到 Berlin 10.1 时遇到问题。

在 XE8 上,它工作正常。

在柏林,我收到“加载位图失败”错误。

我有一个使用这种方法的 DataSnap REST 服务器:

function TSM.Downloafile(): TStream;
var
  s: TFileStream;
begin
  s := TFileStream.Create('C:\image1.jpg', fmOpenReadWrite);
  Result := s;
end;

在 XE8 上,我得到了很好的流,我可以在浏览器中使用 URL 看到图像,例如:

http://localhost:105/datasnap/rest/TSM/Downloafile

在柏林,当我尝试显示图像时,我得到了这个字符串:

[122,216,255,244,0,15,……]

然后位图加载失败。

【问题讨论】:

  • 顺便说一句,如果您不打算写作,没有理由使用fmOpenReadWrite。在某些环境中,如果您没有给定文件夹的写入权限,这甚至可能会失败。
  • 另外,我怀疑这与 Firemonkey 有关,因为您说的是从浏览器访问的 REST 服务器。我建议更改您的问题,将重点放在您的 REST 服务器返回意外格式的事实上。
  • 就您的实际问题而言,我们看不到足够的相关代码。您在哪里处理请求/响应? ContentType 你传什么?
  • 再一边说,没有局部变量s的点,直接赋值给Result
  • 我没有像我在 XE8 上所说的那样设置 ContentType 工作正常我可以看到图像,问题出在柏林,流返回一个类似 [122,216,255,244,0,15,..... .] 失败

标签: delphi bitmap firemonkey datasnap delphi-10.1-berlin


【解决方案1】:

我已经在 URL 中使用 ?json=false 解决了这个问题,谢谢

【讨论】:

    【解决方案2】:

    当您说 DataSnap REST 服务器时,我猜是 TSM.Downloafile(): TStream;不是从主线程调用的。位图不是多线程的,只能在主线程中使用

    【讨论】:

    • 这段代码在 XE8 上工作正常,问题出在柏林,它返回一个类似 [122,216,255,244,0,15,......] 的字符串并失败
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2021-04-29
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多