C# 獲取指定QQ頭像繪制圓形頭像框GDI(Graphics)的方法
效果圖:
完全代碼(下方有詳細(xì)解讀)
private void textBox1_TextChanged(object sender, EventArgs e) {//這里是文本框的事件 值發(fā)生 改變時發(fā)生 StringBuilder UserID = new StringBuilder(20); //值經(jīng)常發(fā)生改變 使用StringBuilder 并且開辟20字符的空間 Regex r = new Regex(@"[\d]"); //正則表達(dá)式 過濾字符 \d表示只要0-9的數(shù)字 //也就是全部數(shù)字 MatchCollection match = r.Matches(textBox1.Text); //需要匹配的字符串 foreach (Match user in match) {//使用循環(huán) 過濾不需要的字符串 UserID.Append(user); //過濾好的字符串 添加進(jìn)StringBuilder } if (UserID.Length <= 4) { //判斷匹配好的字符串是否大于4 //因為QQ最低是5位數(shù)... return; } Thread th = new Thread(() => beg(UserID.ToString())); //創(chuàng)建線程 把 StringBuilder 值傳遞過去 th.IsBackground = true; //設(shè)置成后臺線程 th.Start(); //開始線程 }
線程執(zhí)行的方法:
public void beg(string id) { //線程執(zhí)行的方法體 try { HttpWebRequest beg = (HttpWebRequest)WebRequest.Create("http://q1.qlogo.cn/g?b=qq&nk="+id+"&s=2"); //發(fā)送請求 beg.Timeout = 5000; //請求的時間為5秒 超過就停止請求 HttpWebResponse wb = (HttpWebResponse)beg.GetResponse(); //接收服務(wù)器返回的請求 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 { } }
前言:
某論壇的評論區(qū)模塊,發(fā)現(xiàn)這功能很不錯,琢磨了一晚上做了大致一樣的,用來當(dāng)做 注冊模塊 的頭像綁定功能
某論壇評論區(qū)模塊(動圖)
注冊模塊功能建議:
用戶注冊時,可以選擇性的上傳頭像,如果沒上傳頭像,就默認(rèn)使用QQ綁定的頭像
獲取QQ頭像的接口:
http://q1.qlogo.cn/g?b=qq&nk=這里是QQ號&s=2 這里是尺寸
http://q1.qlogo.cn/g?b=qq&nk=972001531&s=2
尺寸標(biāo)識符 | 尺寸大小 |
---|---|
1 | 40 × 40 |
2 | 40 × 40 |
3 | 100 × 100 |
4 | 140 × 140 |
5 | 640 × 640 |
40 | 40 × 40 |
100 | 100 × 100 |
就是一個頭像的URl
也可以可下載本地 上傳服務(wù)器等…自行研究
接口有了 接下來就是 使用C#去實現(xiàn)功能了…
界面圖:
為了方便演示 沒有做其他的功能…簡單的搭建了一個窗體
從圖可以看出 每修改一個數(shù)字都會重新獲取一次的頭像,
所以代碼就寫在文本框的事件里
該事件的意思就是 每當(dāng)文本框的內(nèi)容發(fā)生改變時發(fā)生
過濾輸入的字符:
考慮到可能會輸入一些 亂七八糟的字符串
例:9720ada15
這樣就識別不了是一個QQ號 所以需要過濾掉,只識別數(shù)字
正則表達(dá)式過濾字符:
定義規(guī)則
Regex r = new Regex(@"[\d]"); //正則表達(dá)式 過濾字符 \d表示只要0-9的數(shù)字 或者 Regex r = new Regex(@"[0-9]");
存儲匹配好的字符串
Regex r = new Regex(@"[\d]"); //正則表達(dá)式 過濾字符 \d表示只要0-9的數(shù)字 或者 Regex r = new Regex(@"[0-9]");
匹配字符串:
foreach (Match user in match) {//使用循環(huán) 過濾不需要的字符串 UserID.Append(user); //過濾好的字符串 添加進(jìn)StringBuilder }
判斷匹配好的長度
if (UserID.Length <= 4) { //判斷匹配好的字符串是否大于4 //因為QQ最低是5位數(shù)... return; //不大于4就返回 }
使用接口QQ接口:
因為接口是一個網(wǎng)頁 所以需要發(fā)送請求
需要用到
HttpWebRequest: 發(fā)送網(wǎng)頁請求
HttpWebResponse: 接收服務(wù)器發(fā)送的請求
但發(fā)送請求時又有一個 問題 那就是 如果網(wǎng)速比較慢 或者 服務(wù)器 響應(yīng)速度慢 會造成 軟件的假死 但是可以通過線程解決這個問題…
定義線程:
Thread th = new Thread(() => beg(UserID.ToString())); //創(chuàng)建線程 把 StringBuilder 值傳遞過去 th.IsBackground = true; //設(shè)置成后臺線程 th.Start(); //開始線程 }
線程執(zhí)行的方法:
發(fā)起請求:
HttpWebRequest beg = (HttpWebRequest)WebRequest.Create("http://q1.qlogo.cn/g?b=qq&nk="+id+"&s=2"); //發(fā)送請求 beg.Timeout = 5000; //請求的時間為5秒 超過就停止請求
接收返回請求:
HttpWebResponse wb = (HttpWebResponse)beg.GetResponse(); //接收服務(wù)器返回的請求 流的方式
使用流轉(zhuǎn)換:
得到流后 可以把圖片保存到 本地 等等…
Stream s = wb.GetResponseStream(); //把回來的請求變 一個 流
圖片轉(zhuǎn)成圓形:
圖片框的默認(rèn)情況下是 方形
并沒有直接的屬性變成圓形…
這里使用GDI繼續(xù)繪制
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; //賦值給圖片框 } } }
這樣就完成了 …
到此這篇關(guān)于C# 獲取指定QQ頭像繪制圓形頭像框GDI(Graphics)的文章就介紹到這了,更多相關(guān)C# 圓形頭像框內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SuperSocket入門--Telnet服務(wù)器和客戶端請求處理
本文的控制臺項目是根據(jù)SuperSocket官方Telnet示例代碼進(jìn)行調(diào)試的,官方示例代碼:Telnet示例。下面跟著小編一起來看下吧2017-01-01C#基于TCP協(xié)議的服務(wù)器端和客戶端通信編程的基礎(chǔ)教程
這篇文章主要介紹了C#基于TCP協(xié)議的服務(wù)器端和客戶端通信編程的基礎(chǔ)教程,文中講解了C#中TCP編程主要相關(guān)的TcpListener類與TcpClient類用法,需要的朋友可以參考下2016-04-04C#將數(shù)字轉(zhuǎn)換成字節(jié)數(shù)組的方法
這篇文章主要介紹了C#將數(shù)字轉(zhuǎn)換成字節(jié)數(shù)組的方法,涉及C#字符串操作的技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04