DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: melqui
今日帖子: 4
在线用户: 1
导航: 论坛 -> 移动应用开发 斑竹:flyers,iamdream  
作者:
男 aknightchen (.) ★☆☆☆☆ -
盒子活跃会员
2020/4/28 21:21:03
标题:
FMX下, 如何把保存在数据库中的Icon显示出来? ( FMX下, 没有TIcon类型 ) 浏览:1712
加入我的收藏
楼主: 原先数据中, 是以Icon格式,保存在数据库的Blob字段中,

现在,在FMX.Android中, 想把它显示在Form1的Image上,如何处理?

哪位朋友知道,麻烦指点一下, 万分感谢!!!

aStream:=TMemoryStream.create;
aStream.Size:=0;
TBlobField(adoquery1.FieldByName('IMG')).SaveToStream(aStream);
aStream.Position:=0;
aStream.SaveToFile('某个目录下/a.ico');

这个是成功的.但是如何转化成Image1上显示
----------------------------------------------
...
作者:
男 wr960204 (武稀松) ★☆☆☆☆ -
盒子活跃会员
2020/4/28 23:13:36
1楼: http://www.raysoftware.cn/?p=589
我几年前写的,实际上会把ICON里面每个分辨率的图解析到一个BITMAP的LIST里面去。
----------------------------------------------
武稀松http://www.raysoftware.cn
作者:
男 aknightchen (.) ★☆☆☆☆ -
盒子活跃会员
2020/4/29 7:52:38
2楼: 昨天看了您的代码, 搞鼓了一阵, 好像不行, 今天再打起精神, 再做实验研究一下!!!

有武哥一说, 就有信心了. 谢谢武哥!
----------------------------------------------
...
作者:
男 aknightchen (.) ★☆☆☆☆ -
盒子活跃会员
2020/4/29 10:43:28
3楼: 武哥,您好. (以下代码是在Android环境下)

我引用你的单元: FMX.Images.icon.pas

    file1:=sGetUserTmpDir+'a.ico'; --此文件一定正确(因为我有一个上传的子过程,把这个file1传到电脑上,判断它是完全正确的ICO)

    file2:=sGetUserTmpDir+'b.bmp';

    aBmpList:=TBmpList.Create();
    LoadIcon(file1,aBmpList);
    aBmpList[0].SaveToFile(file2);  -->这一步会报错: Saving bitmap failed.

    Image1.Bitmap.Loadfromfile(File2); //显示图片在Image1上(这是我的目标)

   
    (上面是Android报错行, 但win32环境下,就正常执行的,且图片可以Image1显示)

    (其实,我的目的很简单, 就是想加 ico文件加载到Image1控件中,
     由于我不会直接的加截, 我就尝试先保存成bmp文件,再加载.

     先保存成bmp,再加载.==>这一招,在win32下是成功的,但在Android下失败.

感谢武哥百忙之中抽空看一下.
----------------------------------------------
...
作者:
男 aknightchen (.) ★☆☆☆☆ -
盒子活跃会员
2020/4/29 11:25:00
4楼: 再次证明: file1:=sGetUserTmpDir+'a.ico';
是一定存在的!!!也是正确的ico,

因为,我是用一个子过程,把电脑端的ICO,传到手机上,
传完后,再回传到电脑上,发现是正确的.

并且,我还用其它ico图像工具,做了一个ico,来做测试(防止我自个的ico格式有问题)

即: 证明我的file1本身没有问题.(存在,且,格式是ico格式)
----------------------------------------------
...
作者:
男 delphiilove (乌羽玉) ★☆☆☆☆ -
普通会员
2020/4/29 14:36:20
5楼: android 下的路径的问题
----------------------------------------------
-
作者:
男 aknightchen (.) ★☆☆☆☆ -
盒子活跃会员
2020/4/29 18:11:59
6楼: 为了证明路径没问题,

我改了一下代码,如下:

procedure TframeTest.Button1Click(Sender: TObject);
var
  aBmpList:TBmpList;
begin
  if not FileExists(sGetUserTmpDir+'a01.ico') then
  begin
    ShowMessage('没有此文件');
    Exit;
  end;

  aBmpList:=TBmpList.Create();
  LoadIcon(sGetUserTmpDir+'a01.ico',aBmpList);
  aBmpList[0].SaveToFile(sGetUserTmpDir+'a01.bmp'); --执行到这一步时,报错: "Saving bitmap failed"
end;


这样,就证明文件路径不会有问题了.(执行中不提示"没有此文件")
----------------------------------------------
...
作者:
男 aknightchen (.) ★☆☆☆☆ -
盒子活跃会员
2020/4/30 18:33:29
7楼: class function TBitmapCodecManager.SaveToFile(const AFileName: string; const Bitmap: TBitmapSurface;
  const SaveParams: PBitmapCodecSaveParams = nil): Boolean;
var
  Codec: TCustomBitmapCodec;
  Descriptor: TBitmapCodecClassDescriptor;
begin
  Result := False;
  if FBitmapCodecClassDescriptors <> nil then
    for Descriptor in FBitmapCodecClassDescriptors do
      if SameText(ExtractFileExt(AFileName), Descriptor.Extension, loUserLocale) and Descriptor.CanSave then
      begin
        Codec := Descriptor.BitmapCodecClass.Create;
        try
          Result := Codec.SaveToFile(AFileName, Bitmap, SaveParams);
        finally
          Codec.Free;
        end;
      end;
end;

上面代码是: FMX.Graphics.pas
我跟踪进去, 发现SaveToFile中,不支持 .bmp格式.

因此,我把上一楼的代码 a01.bmp,改为a01.png, 就可以保存了.
同时,另一个Image1.bitmap.loadfromfile(sGetUserTmpDir+'a01.png')也成功了.

只是颜色好像不正常,好像是ps中蓝色通道的图片
----------------------------------------------
...
作者:
男 aknightchen (.) ★☆☆☆☆ -
盒子活跃会员
2020/5/2 9:51:25
8楼: 最后, 实在没办法, 我原先数据库中, 原先Icon保存的, 我再增加一列保存它的BMP图片.  然后, 就可以读出来了. 

没办法的办法, 如果大侠有更好的读取icon方法, 麻烦再指点一下.
----------------------------------------------
...
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行781.25毫秒 RSS