首页 > 编程语言 >C# GDI+绘制网络获取指定QQ圆形头像框

C# GDI+绘制网络获取指定QQ圆形头像框

时间:2024-03-01 15:46:00浏览次数:20  
标签:QQ Regex 请求 C# 像框 beg 线程 new

某论坛的评论区模块,发现这功能很不错,琢磨了一晚上做了大致一样的,用来当做 注册模块 的头像绑定功能,下面通过实例代码给大家介绍下C# 获取指定QQ头像绘制圆形头像框GDI(Graphics)的方法,感兴趣的朋友一起看看吧。

效果图:

在这里插入图片描述

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 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();            //开始线程        }

线程执行的方法:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 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号 所以需要过滤掉,只识别数字

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

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

存储匹配好的字符串

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

匹配字符串:

1 2 3 4 5 6 foreach (Match user in match)            {//使用循环 过滤不需要的字符串                  UserID.Append(user);                //过滤好的字符串 添加进StringBuilder            }

判断匹配好的长度

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

使用接口QQ接口:

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

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

在这里插入图片描述

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

定义线程:

1 2 3 4 5 6 7 8 9 Thread th = new Thread(() => beg(UserID.ToString()));     //创建线程      把 StringBuilder 值传递过去           th.IsBackground = true;     //设置成后台线程       th.Start();     //开始线程 }

线程执行的方法:

发起请求:

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

接收返回请求:

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

使用流转换:

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

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

图片转成圆形:

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

在这里插入图片描述

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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 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)的文章就介绍到这了

标签:QQ,Regex,请求,C#,像框,beg,线程,new
From: https://www.cnblogs.com/soliang/p/18047237

相关文章

  • C++类开发第五篇(继承和派生的初体验)
    inheritance在C++中,继承是一种面向对象编程的特性,允许一个类(称为子类或派生类)从另一个类(称为基类或父类)那里继承属性和行为。通过继承,子类可以获得父类的数据成员和成员函数,从而可以重用父类的代码并扩展其功能。这样可以提高代码的复用性和可维护性,同时也符合面向对象编程的封......
  • Tricks
    字符串计算一个字符串\(S\)的border的时间复杂度是\(O(|S|)\)的,且与模板串无关。在更换模板串时,不需要重新计算border。对于两个字符串集合,两两匹配的时间复杂度从\(m\sum|S|+n\sum|T|\),降低到了\(\sum|S|+n\sum|T|\)。(2.16A60pts)动态规划有些题目可以......
  • Modbus和Modbus/TCP协议
    一.概述Modbus是MODICON公司与1979年开发的一种通讯协议,是一种工业现场总线协议标准。1996年施耐德公司推出了基于以太网TCP/IP的Modbus协议------ModbusTCP。Modbus协议是一项应用层报文传输协议,包括ASCII、RTU、TCP三种报文类型,协议本身并没有定义物理层,只是定义了控制器......
  • C# MiniExcel 导入和导出表格数据
    C#MiniExcel导入和导出表格数据1.首先从NuGet包里下载MIniExcel文件引入然后下面是一段Api控制器导入的代码导入导出的表格用.xlsx或.xls工作表///<summary>///上传文件到服务器端///</summary>///<paramname="formFile"></param>///<returns></returns>[......
  • 454. 四数相加 II c
    typedefstructnode{intsum;intcount;structnode*repeatnext;}hash;voidinit_hash(hash*h){for(inti=0;i<128;i++){h[i].sum=0;h[i].count=0;h[i].repeatnext=NULL;}}hash*find_hash(hash*h,intnumb......
  • C#常用GDI+文字操作汇总
    这篇文章主要介绍了C#常用GDI+文字操作,包括文字投影、倒影、旋转等特效,对于提升程序界面的视觉效果有很大的用处。本文实例汇总了C#常用GDI+文字操作,包含了文字的投影、倒影、旋转等常见的效果,在进行C#应用程序开发中有不错的实用价值。分享给大家供大家参考之用。具体如下:一......
  • 介绍几个scss 与css 中的新的特性
    介绍几个scss与css中的新的特性css中的@layer。用法如下@layerlow,high;@layerlow{.btn{font-Size:10px;}}@layerhigh{.btn{font-Size:11px;}}@layer{.btn{font-Size:12px;}}.btn{font-Size:1......
  • 国产芯片方案:充气泵方案SIC8833C芯片
    车载手持充气泵是一个用在汽车、摩托车、电动车车胎打气,也常用于充气篮球、足球等球类补气用。在很多时候都是作为车载设备使用,通常用于车胎气压不够,爆胎修理补气使用,这种手持的充气泵,体积小,携带方便,几乎有车的人手一个。车载手持充气泵方案设计主要根据其工作原理,以传感......
  • C#中的GDI+图像编程详解
    本文详细讲解了C#中的GDI+图像编程,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值。一、GraphicsGDI+是GDI(WindowsGraphicsDeviceInterface)的后继者,它是.NETFramework为操作图形提供的应用程序编程接口,主要用在窗体上绘制各种图形图像,可以用于......
  • Pycharm:在工程目录下新建一个Python.exe
    1、起因公司电脑上把Python安装在了系统盘,但是我没有系统盘的修改权限,导致用pip时无法把包安装到系统盘2、解决方案在工程目录下,为工程新建一个Python.exe,之后该工程都采用这个python和它的pip,把包安装在工程包下。1)File→Settings→Project:xxx→PythonInterpreter2)Python......