将任一图象转换为图标

图标的在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;

将任一图象转换为图标相关推荐

  1. iconfont 转换为图标字体。

    iconfont 阿里巴巴矢量图库是个好东西呀~  http://www.iconfont.cn/ 巨大的图标库,可惜都是png的,不能随意用作字体图标. 这里讲一下,如何将iconfont转换为字体 ...

  2. 【CSS进阶】精灵图、字体图标、用户界面样式、常见布局技巧、初始化、CSS三角

    该系列文章是博主学习前端入门课程的笔记,同时也为了方便查阅,有任何问题都欢迎在评论区提出.本文主要介绍精灵图.字体图标.CSS三角.用户界面样式.vertical-align.常见布局技巧.初始化 思 ...

  3. CSS精灵图、字体图标、三角、鼠标样式、用户界面样式、溢出省略号

    [CSS精灵图.字体图标.三角.鼠标样式.用户界面样式.溢出省略号] 本文档是个人对 Pink 老师课程的总结归纳及补充,转载请注明出处! 一.精灵图 1.1 为什么需要精灵图? 一个网页中往往会应用 ...

  4. 前端切图之svg图标的复用基于defs和use 亲测有用

    切图网长期致力于web前端开发外包服务,而我们也关注到现在图标很多时候采用svg更多一点,然后图标字体文件已经提供了很多种类的图标,不过采用svg图标可以自行选择更符合.更好看的图标,相比于字体图标更 ...

  5. html精灵图坐标如何确定,CSS实现精灵图与字体图标

    精灵图: 在以前,每个图片资源都是独立的一张张图片,浏览器访问网站中的不同网页时是重复获取这一张张图片的,这代表需要访问很多次资源. 为了减少资源的访问次数,将多个常用的图片集合到一张图片中(网页的缓 ...

  6. CSS精灵图、字体图标

    精灵图.字体图标 文章目录 精灵图.字体图标 精灵图 原理 代码 字体图标 使用流程 1.下载兼容性字体文件包到本地 2.把字体文件包引入到html页面中 精灵图 一个页面上可能有很多小图标,每个图标 ...

  7. JAVA学习——图形化窗口图标设置

    JAVA学习--图形化窗口图标设置 一.问题: 明明按着老师的代码来学习,但是我死活都改变不了图形化窗口左上角的小图标,为什么呢? 先上代码: Image im=(new ImageIcon(path ...

  8. 修复电脑图标变白图标

    修复电脑图标变白图标 新建一个.txt文件 把以下代码粘贴到这个文件里并保存 @echo off ::结束资源管理进程 taskkill /f /im explorer.exe ::返回到根目录 CD ...

  9. MAC Omnigraffle 泳道图及流程图标型版分享

    MAC Omnigraffle 泳道图及流程图标型版分享 最近流程图画的多,GRA没有模版每次泳道都要手扣,还要强迫症对其,耗费太多精力:好在网络冲浪多年找到知乎匿名大佬分享的泳道图型版,但是光有型版 ...

最新文章

  1. access 一亿条数据_循环运算数据溢出
  2. 记asp.net VB与C# 页面参数传值
  3. java 去除干扰_【Selenium-WebDriver实战篇】Java丨验证码图片去除干扰像素,方便验证码的识别(转)...
  4. Tensorflow载入模型详解,方法一(基础版):针对测试模型性能 和 使用模型。
  5. 湖北高校实用的大数据平台,专业的高校大数据实训平台解决方案,波若高校实训平台...
  6. 《jQuery基础》总结
  7. 数据结构实验之排序五:归并求逆序数
  8. 子查询 不同情况 mysql
  9. UTF-8 汉字编码与其16进制对照
  10. vpu测试_611bp上的VPU测试
  11. Python自动化:根据模板批量生成含指定数据的word文档
  12. C语言#判断今天是工作日还是休息日
  13. eclipse + pydev远程调试OpenStack
  14. 心理学家:人生最可怕的不是失去爱,而是失去这种能力
  15. Resilience4j
  16. ubuntu16.04系统搜狗输入法按shift无法切换中英文
  17. su与su - 的区别
  18. python的数据库中间件_sparrow
  19. Navicat Linux无限试用
  20. 【艾思软件】定制开发小程序需要费用明细

热门文章

  1. 章鱼网络,构建未来Web3弹性之网
  2. c# 获取屏幕DPI
  3. 国外免费在线计算机课程学习
  4. layer系列之弹层layer.prompt
  5. element-ui+js+vue——实现图片的放大缩小拖动等功能——技能提升
  6. 7-33 地下迷宫探索
  7. 从无序到有序:5分钟破解离散制造业利润谜题
  8. 使用idea打包war包和maven项目打包war包放到tomcat中运行,以及报404错误的解决
  9. 电脑出现蓝屏英文要怎么处理?有什么好的处理方法么?
  10. element 验证出现英文_Element-ui中自动验证问题的解决