永发信息网

delphi 的图片控件如何加载图片呀给下代码或者详细点

答案:2  悬赏:20  手机版
解决时间 2021-02-08 19:44
delphi 的图片控件如何加载图片呀给下代码或者详细点
最佳答案
点一下图片控件,然后在控件属性栏找picture属性,点一下就可以换图片了
全部回答
delphi的timage控件在加载图片的时候,采用的是同步加载的方式。也就是主线程会一直处于阻塞状态,直到timage.picture.loadfromfile加载完毕为止。也就是说,如果你的代码运行到了loadfromfile之后就代表图片已经加载完成了。当然,因为是同步加载,所以主线程在加载图片时,完全没有机会重绘窗口。所以加载大图片时可能会有卡顿。 如果你确信你需要加载的图片的体积非常大(图片至少要大于5mb)以上,需要异步地加载图片。你可以创建一个新线程,并在这个线程里创建一个tpicture,然后使用tpicture.loadfromfile(stream)来加载图片。然后再这个新线程运行完成后,再经由timage.picture := 你在线程中创建的picture; 的方式来将加载完成的图片对象。 示例代码如下: const   cm_loadcomplete = wm_user + 20; type   tloadthread = class(tthread)   protected     anycpic: tpicture;     procedure execute; override;   public     destructor destroy; override;   end;   tfrmmain = class(tform)     image1: timage;     button1: tbutton;     procedure button1click(sender: tobject);     procedure formdestroy(sender: tobject);   private     { private declarations }     fthread: tloadthread;     procedure cmloadcomplete(var message: tmessage); message cm_loadcomplete;   public     { public declarations }   end; var   frmmain: tfrmmain; implementation uses   jpeg, pngimage; {$r *.dfm} { tfrmmain } procedure tfrmmain.button1click(sender: tobject); begin   //开始用线程异步加载图像   if not assigned(fthread) then   begin     fthread := tloadthread.create(true); fthread.resume;   end   else     showmessage('图像正在加载中...'); end; procedure tfrmmain.cmloadcomplete(var message: tmessage); begin   //tpicture异步加载完成,将其设置为image1的picture   image1.picture := fthread.anycpic;   //终止线程   fthread.waitfor; freeandnil(fthread); end; procedure tfrmmain.formdestroy(sender: tobject); begin   if assigned(fthread) then   begin     fthread.waitfor; fthread.free;   end; end; { tloadthread } destructor tloadthread.destroy; begin   anycpic.free; inherited; end; procedure tloadthread.execute; begin   anycpic := tpicture.create;   anycpic.loadfromfile('d:\test1.jpg');   //如果图像是jpeg则先进行解码工作   if anycpic.graphic is tjpegimage then     (anycpic.graphic as tjpegimage).dibneeded;   //将图像提交至主线程,不要使用synchronize函数,可能会导致主线程锁死   postmessage(frmmain.handle,cm_loadcomplete,0,0); end;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
北大青鸟的专科学历和本科学历差别大吗?
焕彩女人生活馆地址在什么地方,我要处理点事
爱之深,心则痛的意思?
据图一叶片的结构示意图,图二叶肉细胞及细胞
电工用的工具 要翻译成英文哦!! 急急急!
甲美天下地址在什么地方,想过去办事
美怡丽容地址在什么地方,我要处理点事
假装和男朋友说分手,会得到什么结果
娜美美容院地址有知道的么?有点事想过去
苏州远见旅游规划设计院地址在什么地方,想过
某物体被力压在墙上,且沿墙面做匀速直线运动
大自然美容地址有知道的么?有点事想过去
TCL座机电话来电显示"E"是什么意思
天姿丽人美容养生会所怎么去啊,我要去那办事
65是一个2位数,十位上是是6,表示( )个( ),
推荐资讯
梦见鞋缝隙夹虫子
新感觉工作室地址在什么地方,想过去办事
大庆市澳顺汽车销售有限公司地址好找么,我有
在NBA那么多励志故事当中属阿里纳斯的最经典
金时万象网城地址好找么,我有些事要过去
西周建立后大举实行分封制,其分封的主体是
恒谊乒乓球俱乐部地址在哪,我要去那里办事
插花牛肉汤地址在哪,我要去那里办事
牡丹江直达和龙的客车是几点的?牡丹江到延吉
真的是有真爱吗,真的会为自己爱人改变吗
春节的来历(简短一点较好)
中国人民财产保险股份有限公司南川支公司在哪
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?