http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 2933|回复: 0

[C#语言基础] 设置控件的轮廓为图片及文字轮廓

[复制链接]
发表于 2013-7-1 16:33:44 | 显示全部楼层 |阅读模式

有需要的带走
    [code=csharp]
      /// <summary>
        /// 把文字转化为一副bitmap型的图像
        /// </summary>
        /// <param name="text">文字</param>
        /// <param name="font">字体,大小</param>
        /// <param name="color">颜色</param>
        /// <returns>最终生成的图像</returns>
        public static Bitmap Text2Bitmap(string text, Font font, Color color)
        {
            //测量文字大小
            Size TextSize = TextRenderer.MeasureText(text, font);
            //创建此大小的图片
            Bitmap bmp = new Bitmap(TextSize.Width, TextSize.Height);
            //使用GDI+绘制
            Graphics g = Graphics.FromImage(bmp);
            g.DrawString(text, font, new SolidBrush(color), new PointF(0f, 0f));
            g.Save();
            g.Dispose();
            //返回图像
            return bmp;
        }
        private unsafe static GraphicsPath getImageOutline(Image img)
        {
            if (img == null) return null;
            // 建立GraphicsPath, 给我们的位图路径计算使用   
            GraphicsPath g = new GraphicsPath(FillMode.Alternate);
            Bitmap bitmap = new Bitmap(img);
            int width = bitmap.Width;
            int height = bitmap.Height;
            BitmapData bmData = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
            byte* p = (byte*)bmData.Scan0;
            int offset = bmData.Stride - width * 3;
            int p0, p1, p2;         // 记录左上角0,0座标的颜色值  
            p0 = p[0];
            p1 = p[1];
            p2 = p[2];
            int start = -1;
            // 行座标 ( Y col )   
            for (int Y = 0; Y < height; Y++)
            {
                // 列座标 ( X row )   
                for (int X = 0; X < width; X++)
                {
                    if (start == -1 && (p[0] != p0 || p[1] != p1 || p[2] != p2))     //如果 之前的点没有不透明 且 不透明   
                    {
                        start = X;                            //记录这个点  
                    }
                    else if (start > -1 && (p[0] == p0 && p[1] == p1 && p[2] == p2))      //如果 之前的点是不透明 且 透明  
                    {
                        g.AddRectangle(new Rectangle(start, Y, X - start, 1));    //添加之前的矩形到  
                        start = -1;
                    }
                    if (X == width - 1 && start > -1)        //如果 之前的点是不透明 且 是最后一个点  
                    {
                        g.AddRectangle(new Rectangle(start, Y, X - start + 1, 1));      //添加之前的矩形到  
                        start = -1;
                    }
                    //if (p[0] != p0 || p[1] != p1 || p[2] != p2)  
                    //    g.AddRectangle(new Rectangle(X, Y, 1, 1));  
                    p += 3;                                   //下一个内存地址  
                }
                p += offset;
            }
            bitmap.UnlockBits(bmData);
            bitmap.Dispose();
            // 返回计算出来的不透明图片路径   
            return g;
        }
        /// <summary>
        /// 得到图像的Region轮廓
        /// </summary>
        /// <param name="img"></param>
        /// <returns>最终生成的轮廓</returns>
        public static Region Image2Region(Image img)
        {
            GraphicsPath g = getImageOutline(img);
            if (g == null)
                return null;
            return new Region(g);
        }
        /// <summary>
        /// 得到文字的轮廓
        /// </summary>
        /// <param name="text">文字</param>
        /// <param name="font">字体,大小</param>
        /// <returns>最终生成的轮廓</returns>
        public static Region Text2Region(string text, Font font)
        {
            Bitmap bmp = Text2Bitmap(text, font, Color.Black);
            return Image2Region(bmp);
        }
[/code]


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-15 19:31

© 2014-2021

快速回复 返回顶部 返回列表