C# 获取指定QQ头像绘制圆形头像框GDI(Graphics)的方法

效果图:

完全代码(下方有详细解读)

 private void textBox1_TextChanged(object sender, EventArgs e)
        {//这里是文本框的事件 值发生 改变时发生

            StringBuilder UserID = new StringBuilder(20);
            //值经常发生改变 使用StringBuilder 并且开辟20字符的空间

            Regex r = new Regex(@"[\d]");
            //正则表达式 过滤字符  \d表示只要0-9的数字
            //也就是全部数字

            MatchCollection match = r.Matches(textBox1.Text);
            //需要匹配的字符串 

            foreach (Match user in match)
            {//使用循环 过滤不需要的字符串

                UserID.Append(user);
                //过滤好的字符串 添加进StringBuilder
            }

            if (UserID.Length <= 4)
            {
                //判断匹配好的字符串是否大于4
                //因为QQ最低是5位数...
                return;
            }

            Thread th = new Thread(() => beg(UserID.ToString()));
            //创建线程      把 StringBuilder 值传递过去

            th.IsBackground = true;
            //设置成后台线程

            th.Start();
            //开始线程
        }

线程执行的方法:

 public void beg(string id)
        {
            //线程执行的方法体

           try
            {
                HttpWebRequest beg = (HttpWebRequest)WebRequest.Create("http://q1.qlogo.cn/g?b=qq&nk="+id+"&s=2");
                //发送请求 

                beg.Timeout = 5000;
                //请求的时间为5秒 超过就停止请求

                HttpWebResponse wb = (HttpWebResponse)beg.GetResponse();
                //接收服务器返回的请求

                Stream s = wb.GetResponseStream();
                //把回来的请求变 一个 流

                using (Image i = new Bitmap(s))
                {    //把流传递过来

                    Bitmap b = new Bitmap(50, 50); //初始像素值

                    using (Graphics g = Graphics.FromImage(b))
                    {//使用Gdi画图  在图片上画 

                        g.SmoothingMode = SmoothingMode.HighQuality;
                        //图片的抗锯齿

                        using (GraphicsPath p = new GraphicsPath(System.Drawing.Drawing2D.FillMode.Alternate))
                        {
                            p.AddEllipse(0, 0, i.Width, i.Height);//添加椭圆

                            g.FillPath(new TextureBrush(i), p);//填充里面

                            pictureBox1.Image = b;
                            //赋值给图片框
                        }

                    }

                }
            }
            catch
            {

            }

        }

前言:

某论坛的评论区模块,发现这功能很不错,琢磨了一晚上做了大致一样的,用来当做 注册模块 的头像绑定功能

某论坛评论区模块(动图)

注册模块功能建议:

用户注册时,可以选择性的上传头像,如果没上传头像,就默认使用QQ绑定的头像

获取QQ头像的接口:

http://q1.qlogo.cn/g?b=qq&nk=这里是QQ号&s=2 这里是尺寸

http://q1.qlogo.cn/g?b=qq&nk=972001531&s=2

尺寸标识符 尺寸大小
1 40 × 40
2 40 × 40
3 100 × 100
4 140 × 140
5 640 × 640
40 40 × 40
100 100 × 100

按照自己头像框的大小自行选择

就是一个头像的URl

也可以可下载本地 上传服务器等…自行研究

接口有了 接下来就是 使用C#去实现功能了…

界面图:

为了方便演示 没有做其他的功能…简单的搭建了一个窗体


从图可以看出 每修改一个数字都会重新获取一次的头像,
所以代码就写在文本框的事件里

该事件的意思就是 每当文本框的内容发生改变时发生

过滤输入的字符:

考虑到可能会输入一些 乱七八糟的字符串
例:9720ada15
这样就识别不了是一个QQ号 所以需要过滤掉,只识别数字

正则表达式过滤字符:
定义规则

 Regex r = new Regex(@"[\d]");
//正则表达式 过滤字符  \d表示只要0-9的数字
   或者
 Regex r = new Regex(@"[0-9]");

存储匹配好的字符串

 Regex r = new Regex(@"[\d]");
//正则表达式 过滤字符  \d表示只要0-9的数字
   或者
 Regex r = new Regex(@"[0-9]");

匹配字符串:

 foreach (Match user in match)
            {//使用循环 过滤不需要的字符串

                UserID.Append(user);
                //过滤好的字符串 添加进StringBuilder
            }

判断匹配好的长度

 if (UserID.Length <= 4)
            {
                //判断匹配好的字符串是否大于4
                //因为QQ最低是5位数...
                return;
                //不大于4就返回
            }

使用接口QQ接口:

因为接口是一个网页 所以需要发送请求
需要用到

HttpWebRequest: 发送网页请求
HttpWebResponse: 接收服务器发送的请求

但发送请求时又有一个 问题 那就是 如果网速比较慢 或者 服务器 响应速度慢 会造成 软件的假死 但是可以通过线程解决这个问题…

定义线程:

Thread th = new Thread(() => beg(UserID.ToString()));
    //创建线程      把 StringBuilder 值传递过去

    th.IsBackground = true;
    //设置成后台线程

    th.Start();
    //开始线程
}

线程执行的方法:

发起请求:

 HttpWebRequest beg = (HttpWebRequest)WebRequest.Create("http://q1.qlogo.cn/g?b=qq&nk="+id+"&s=2");
                //发送请求
 beg.Timeout = 5000;
                //请求的时间为5秒 超过就停止请求

接收返回请求:

   HttpWebResponse wb = (HttpWebResponse)beg.GetResponse();
        //接收服务器返回的请求 流的方式

使用流转换:

得到流后 可以把图片保存到 本地 等等…

  Stream s = wb.GetResponseStream();
                //把回来的请求变 一个 流

图片转成圆形:

图片框的默认情况下是 方形

并没有直接的属性变成圆形…
这里使用GDI继续绘制

using (Image i = new Bitmap(s))
                {    //把流传递过来

                    Bitmap b = new Bitmap(50, 50); //初始像素值

                    using (Graphics g = Graphics.FromImage(b))
                    {//使用Gdi画图  在图片上画 

                        g.SmoothingMode = SmoothingMode.HighQuality;
                        //图片的抗锯齿

                        using (GraphicsPath p = new GraphicsPath(System.Drawing.Drawing2D.FillMode.Alternate))
                        {
                            p.AddEllipse(0, 0, i.Width, i.Height);//添加椭圆

                            g.FillPath(new TextureBrush(i), p);//填充里面

                            pictureBox1.Image = b;
                            //赋值给图片框
                        }

                    }

                }

这样就完成了 …

到此这篇关于C# 获取指定QQ头像绘制圆形头像框GDI(Graphics)的文章就介绍到这了,更多相关C# 圆形头像框内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#圆形头像框制作并从数据库读取

    现在只要是有关头像的框基本都是圆形的了,C#提供的PictureBox控键默认情况下是方形的非常大的影响美观 PictureBox默认情况下 比起上面的还是有一点不太好看的- 使用C#提供的类进行圆形: 工具箱拉出PictureBox 设置图片的显示模式为ZOOM 特别注意: 框的比例必须为一样不然会变椭圆的 窗体加载时: pictureBox1.Image = Image.FromFile(@"C:\Users\Administrator\Desktop\1.png"); 为了方便演

  • C# 获取指定QQ头像绘制圆形头像框GDI(Graphics)的方法

    效果图: 完全代码(下方有详细解读) private void textBox1_TextChanged(object sender, EventArgs e) {//这里是文本框的事件 值发生 改变时发生 StringBuilder UserID = new StringBuilder(20); //值经常发生改变 使用StringBuilder 并且开辟20字符的空间 Regex r = new Regex(@"[\d]"); //正则表达式 过滤字符 \d表示只要0-9的数字 /

  • C# 制作PictureBox圆形头像框并从数据库中读取头像

    现在只要是有关头像的框基本都是圆形的了,C#提供的PictureBox控键默认情况下是方形的非常大的影响美观 PictureBox默认情况下 比起上面的还是有一点不太好看的- 使用C#提供的类进行圆形: 工具箱拉出PictureBox 设置图片的显示模式为ZOOM 特别注意: 框的比例必须为一样不然会变椭圆的 窗体加载时: pictureBox1.Image = Image.FromFile(@"C:\Users\Administrator\Desktop\1.png"); 为了方便演

  • Android自定义View之绘制圆形头像功能

    前言 做APP应用开发的时候,用户头像肯定是必不可少的,但是90%以上的需求头像都是圆形的.那么,如何通过自定义View的方式实现圆形头像呢,那么,本片博文会告诉你不仅仅是实现过程.一定会有意想不到的收获哦! 最终效果 国际惯例,我们先来看最终实现的效果图 自定义RoundImageView继承自ImageView public class RoundImageView extends ImageView { public RoundImageView(Context context) { su

  • Android应用中绘制圆形头像的方法解析

    要画这种圆形带阴影的头像,个人分解成三个图层 1,先画头像边缘的渐变 RadialGradient gradient = new RadialGradient(j/2,k/2,j/2,new int[]{0xff5d5d5d,0xff5d5d5d,0x00ffffff},new float[]{0.f,0.8f,1.0f}, Shader.TileMode.CLAMP); paint.setShader(gradient); canvas.drawCircle(j/2,k/2,j/2,paint

  • Android仿QQ圆形头像个性名片

    先看看效果图: 中间的圆形头像和光环波形讲解请看:http://www.jb51.net/article/96508.htm 周围的气泡布局,因为布局RatioLayout是继承自ViewGroup,所以布局layout就可以根据自己的需求来布局其子view,view.layout(int l,int t,int r,int b);用于布局子view在父ViewGroup中的位置(相对于父容器),所以在RatioLayout中计算所有子view的left,top,right,bottom.那么头

  • Andorid开发之Picasso通过URL获取用户头像的圆形显示

    1.设置布局属性: <ImageView android:scaleType="fitXY"/> 2.BitmapUtils类-- 得到指定圆形的Bitmap对象 public static Bitmap circleBitmap(Bitmap source) { //获取Bitmap的宽度 int width = source.getWidth(); //以Bitmap的宽度值作为新的bitmap的宽高值. Bitmap bitmap = Bitmap.createBit

  • Android自定义控件仿QQ编辑和选取圆形头像

    android大家都有很多需要用户上传头像的需求,有的是选方形,有的是圆角矩形,有的是圆形. 首先我们要做一个处理图片的自定义控件,把传入的图片,经过用户选择区域,处理成一定的形状. 有的app是通过在图片上画一个矩形区域表示选中的内容,有的则是通过双指放大缩小,拖动图片来选取图片.圆形头像,还是改变图片比较好 圆形区域可调节大小. 这个自定义View的图像部分分为三个,背景图片,半透明蒙层,和亮色区域--还是直接贴代码得了 package com.example.jjj.widget; imp

  • Android图像处理之绘制圆形、三角形及扇形的头像

    前言 相信大家在Android日常开发中,绘制圆形和绘制图片都是很容易的事情,但是绘制圆形图片就有点难倒人了.以前为了偷懒就直接去github上找一个开源项目,后来才发现绘制圆形图片其实也是很简单的事. 绘制圆形图片也需要两个步骤: 绘制圆形和绘制图片,只不过要让它们取并集,得到的结果就是一张圆形图片了. 直接上代码: public class CircleImageView extends View { private Paint mPaint; private Paint mTargetPa

  • iOS如何裁剪圆形头像

    本文实例为大家介绍了iOS裁剪圆形头像的详细代码,供大家参考,具体内容如下 - (void)viewDidLoad { [super viewDidLoad]; //加载图片 UIImage *image = [UIImage imageNamed:@"菲哥"]; //获取图片尺寸 CGSize size = image.size; //开启位图上下文 UIGraphicsBeginImageContextWithOptions(size, NO, 0); //创建圆形路径 UIBez

  • iOS实现带文字的圆形头像效果

    下面就来实现一下这种效果   圆形头像的绘制 先来看一下效果图 分析一下: 1.首先是需要画带有背景色的圆形头像 2.然后是需要画文字 3.文字是截取的字符串的一部分 4.不同的字符串,圆形的背景色是不一样的 5.对于中英文同样处理,英文的一个字符和中文的一个汉字同样算作一个字符 6.文字总是居中显示 好 有了这样几点 我们就可以开始画图了 看一下最终实现的效果图 首先 ,我们需要自定义一个view当做自定义头像,在view的drawRect方法中进行图像的绘制 @interface Round

  • 利用Android中BitmapShader制作自带边框的圆形头像

    效果如下: BitmapShader 的简单介绍 关于 Shader是什么,Shader的种类有哪几种以及如何使用不属于本文范畴,对这方面不是很了解的同学,建议先去学习一下 Shader 的基本使用. BitmapShader主要的作用就是 通过Paint对象,对 画布进行指定的Bitmap填充,实现一系列效果,可以有以下三种模式进行选择 1.CLAMP - 拉伸,这里拉伸的是图片的最后一个元素,不断地重复,这个效果,在图片比较小,而所要画的面积比较大的时候会比较明显. 2.REPEAT - 重

随机推荐