将任一图象转换为图标

将任一图象转换为图标

图标的在Delphi中用一个TICON数据类型存储。
   常规的将图像转换为图标的方式是创建两个和目标图标大小一致的图片,一个是图象,一个是掩膜(都是bmp图).然后使用图标建立的函数创建图标。此方法简单实用,除了要建立两个中间位图之外不须其他的特别资源。但此方式建立的图标,本人测试了多种方法,都只能建立256色的图标,不能创建真彩色图标。
    为了建立一个真彩的图标,我费尽心机。有一天灵光一闪:TImageList类不是可以进行位图和图标的转换吗?于是详细研究了TImageList类的属性和方法。结果发现了一些重大线索:
         TImageList.Create(integer;integer) 重载创建过程,两个参数指定位图的宽度和高度
         TImageList.Add(img,mask:TBitmap)将一个位图和一个掩膜位图加进去成为一个图片项目
         TImageList.GetICon(integer;TIcon)获取某个位置,将获取的值以图标方式存储在第二个参数中
    我本人做了一下测试,果真屡试不爽,不仅可以制作出真彩图标,而且可以建立48x48的真彩图标.    
    
下面附上部分源代码:
      常规的制作图标的源码:
           Function   ImgToICO(img:Tgraphic;icosize:integer):TICON;
           var
                bmp:TBitmap;
                maskBMP:TBitmap;
                rct:TRECt;
                IconInfo : TIconInfo;
           begin
                   //绘制图标图片          
                bmp:=TBitmap.create;
                bmp.width:=icosize;
                bmp.height:=icosize;
                rct.left:=0;rct.top:=0;rct.right:=icosize;rct.bottom:=icosize;
                bmp.canvas.strethDraw(rct,img);
                   //绘制图标掩膜图片
                maskBMP:=TBitmap.create;
                maskBMP.width:=icosize;MaskBmp.heigt:=icosize;
                maskBMp.canvas.brush.color:=0;
                maskBmp.canvas.fillrect(rct);
                   //设置图标畔?
                iconInfo.fIcon:=true;
                iconInfo.xHotspot:=0;
                iconInfo.yHotspot :=0;
                iconInfo.hbmMask :=maskbmp.handle;
                iconInfo.hbmColor :=bmp.handle;
                   //创建图标
                Result:=TICON.create;
                result.handle:=CreateIconIndirect(IconInfo);
                maskBmp.free;
                Bmp.free;
           end;
      

     通过TImageList制作图标:
     function Img2Ico(img:TGRaphic;icosize:integer):TICON;
       var
            ilist:TImageList;
            bmp:TBitmap;
            maskBmp:TBitmap;  
       begin
                ilist:=TImageList.create(nil);
                ilist.width=icosize;
                ilist.height=icosize;
                bmp:=TBitmap.create;
                bmp.width:=icosize;
                bmp.height:=icosize;
                rct.left:=0;rct.top:=0;rct.right:=icosize;rct.bottom:=icosize;
                bmp.canvas.strethDraw(rct,img);
                maskBMP:=TBitmap.create;
                maskBMP.width:=icosize;MaskBmp.heigt:=icosize;
                maskBMp.canvas.brush.color:=0;
                maskBmp.canvas.fillrect(rct);
                   //创建图标
                ilist.add(bmp,maskbmp);
                Result:=TICOn.create;
                ilist.getICon(0,result);
       end;  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值