导航:
论坛 -> 移动应用开发
斑竹:flyers,iamdream
作者:
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上显示
----------------------------------------------
...
作者:
2020/4/28 23:13:36
1楼:
http://www.raysoftware.cn/?p=589 我几年前写的,实际上会把ICON里面每个分辨率的图解析到一个BITMAP的LIST里面去。
----------------------------------------------
武稀松http://www.raysoftware.cn
作者:
2020/4/29 7:52:38
2楼:
昨天看了您的代码, 搞鼓了一阵, 好像不行, 今天再打起精神, 再做实验研究一下!!! 有武哥一说, 就有信心了. 谢谢武哥!
----------------------------------------------
...
作者:
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下失败. 感谢武哥百忙之中抽空看一下.
----------------------------------------------
...
作者:
2020/4/29 11:25:00
4楼:
再次证明: file1:=sGetUserTmpDir+'a.ico'; 是一定存在的!!!也是正确的ico, 因为,我是用一个子过程,把电脑端的ICO,传到手机上, 传完后,再回传到电脑上,发现是正确的. 并且,我还用其它ico图像工具,做了一个ico,来做测试(防止我自个的ico格式有问题) 即: 证明我的file1本身没有问题.(存在,且,格式是ico格式)
----------------------------------------------
...
作者:
2020/4/29 14:36:20
5楼:
android 下的路径的问题
----------------------------------------------
-
作者:
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; 这样,就证明文件路径不会有问题了.(执行中不提示"没有此文件")
----------------------------------------------
...
作者:
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中蓝色通道的图片
----------------------------------------------
...
作者:
2020/5/2 9:51:25
8楼:
最后, 实在没办法, 我原先数据库中, 原先Icon保存的, 我再增加一列保存它的BMP图片. 然后, 就可以读出来了. 没办法的办法, 如果大侠有更好的读取icon方法, 麻烦再指点一下.
----------------------------------------------
...