【问题标题】:Delphi Android download remote PNG to TImageDelphi Android下载远程PNG到TImage
【发布时间】:2015-11-28 08:25:12
【问题描述】:

试图将远程 PNG 文件分配给 TImage。我试过以下,它说“无效的流格式”。我不知道如何将 PNG 图像下载到 Firemonkey 风格的应用程序(XE8)中:

procedure TfrmMain.Button1Click(Sender: TObject);
var qrString: String;
  MS : TMemoryStream;
  Png: TImageMultiResBitmap;
begin
  MS := TMemoryStream.Create;
  Png := TImageMultiResBitmap.Create(Png);
  try
    IdHTTP1.get('https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=chujisko',MS);
    Ms.Seek(0,soFromBeginning);
    Png.LoadFromStream(MS);
    img1.MultiResBitmap.Assign(Png);

  finally
    FreeAndNil(Png);
    FreeAndNil(MS);
  end;

【问题讨论】:

  • 您正在下载图像。但是您不能分配 png 或将内容分配给 TImage 是消息。谁告诉你那个网址提供了一个png?将内容保存到文件并使用图像查看器进行检查。
  • 确实,您的网址提供了我现在看到的 png 图像。
  • Png := TImageMultiResBitmap.Create(Png); 是错误的。您不能将Png 指定为其自己的Owner。请改用 nilSelf 作为所有者。此外,您正在加载单个 PNG,因此无论如何您都不应该使用TImageMultiResBitmap,因为您不处理多分辨率图像。尝试改用img1.Bitmap.LoadFromStream(Ms),完全不要使用img1.MultiResBitmap(除非您打算下载多个不同分辨率的PNG)。
  • 嗨,雷米,非常感谢您的建议!我将 TImageMultiResBitmap 转换为 TBitmap,它就像一个魅力!太好了!

标签: android image delphi png firemonkey


【解决方案1】:

各位,这似乎是正确且可靠的解决方案:

procedure TfrmMain.Button1Click(Sender: TObject);
var qrString: String;
    qrDims: integer;
    MS : TMemoryStream;
begin
if Edit1.Text <> '' then begin
  qrDims := Screen.Width - 100;
  qrString := 'http://chart.googleapis.com/chart?chs=' + IntToStr(qrDims) + 'x' + IntToStr(qrDims) + '&cht=qr&chl=' + Edit1.Text;
  MS := TMemoryStream.Create;
  try
    IdHTTP1.get(qrString, MS);
    Ms.Seek(0,soFromBeginning);
    img1.Bitmap.LoadFromStream(MS);
    img1.Bitmap.SaveToFile();
  finally
    FreeAndNil(MS);
  end;
end else begin
  ShowMessage('Please, input a text.');
end;
end;

【讨论】:

  • 为什么Png还在? img1 不使用它。
  • 抱歉,没看到。固定。
猜你喜欢
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多