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-01
C#基于TCP協(xié)議的服務(wù)器端和客戶端通信編程的基礎(chǔ)教程
這篇文章主要介紹了C#基于TCP協(xié)議的服務(wù)器端和客戶端通信編程的基礎(chǔ)教程,文中講解了C#中TCP編程主要相關(guān)的TcpListener類與TcpClient類用法,需要的朋友可以參考下2016-04-04
C#將數(shù)字轉(zhuǎn)換成字節(jié)數(shù)組的方法
這篇文章主要介紹了C#將數(shù)字轉(zhuǎn)換成字節(jié)數(shù)組的方法,涉及C#字符串操作的技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04

