多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > 完美實現類似QQ的自拍頭像、上傳頭像功能!(Demo 源碼)

完美實現類似QQ的自拍頭像、上傳頭像功能!(Demo 源碼)

來源:程序員人生   發布時間:2014-10-06 08:00:01 閱讀次數:2115次

現在很多下載客戶端程序都需要設定自己頭像的功能,而設定頭像一般有兩種方式:使用攝像頭自拍頭像,或者選擇一個圖片的某部分區域作為自己的頭像。

一.相關技術

  若要實現上述的自拍頭像和上傳頭像的功能,會碰到以下要解決的問題:

(1)調用攝像頭,捕獲攝像頭采集的視頻,并將采集的視頻繪制到UI上。

(2)從圖片文件讀取Image,并顯示在控件上(這個相當easy)。

(3)在顯示的視頻或圖片上,能夠拖動一個正方形,以選擇指定部分的區域作為自己的頭像。

(4)從視頻中截獲一幀保存為圖片。

(5)從圖片中截取某個區域作為自己的頭像。

  為了解決這些問題,就需要涉及到的技術有DirectX Show、GDI+、drawdib(位圖繪制)、圖像截取等。

二.Demo實現

  當然這篇文章不是要告訴大家這些技術的詳細細節,相關的資料網上有很多,如果需要從頭到尾自己實現,可以從了解這些技術入手。在這里,我將傲瑞通(OrayTalk)中的設定頭像的功能拆分出來做成一個demo,供大家參考和使用,避免大家浪費時間重復發明輪子。我們先看看demo的運行效果。

  自拍頭像:

      

  上傳頭像:

      

  在demo中,點擊窗體上的確定按鈕,就會自動將所選擇區域的圖像保存為自己的頭像了。這是怎么做到的了?實際上,我們是使用了OMCS提供的兩個控件:HeadImagePanel和ImagePartSelecter。

1.HeadImagePanel 控件

  先看看HeadImagePanel控件的定義吧:

復制代碼
public class HeadImagePanel : UserControl { // 當選擇的頭像區域發生改變時,會觸發此事件。參數為頭像位圖。 public event CbGeneric<Bitmap> HeadImageSelected; // 獲取結果頭像。 public Bitmap GetHeadImage(); // 初始化攝像頭,并啟動它。      // cameraDeviceIndex: 攝像頭的索引 // cameraSize: 攝像頭采集分辨率 // outputImageLen: 輸出的正方形頭像的邊長 public void Start(int cameraDeviceIndex, Size cameraSize, int outputImageLen); // 停止攝像頭。 public void Stop(); }
復制代碼

(1)將HeadImagePanel拖到窗體上,然后調用其Start方法,它就會自動啟動攝像頭,并將捕捉的視頻繪制帶該控件的表面上,而且,同時會在視頻的上面繪制藍邊的正方形,我們可以通過拖動或改變這個正方形的大小,來指定選擇的區域。

(2)當區域指定好后,可以調用其GetHeadImage方法,其就會返回最終的結果圖像(即指定區域內的視頻圖像)。

(3)使用完畢后,調用HeadImagePanel的Stop方法以釋放攝像頭及相關的其它資源。

(4)要特別注意的是,請將HeadImagePanel控件的Size設置為與攝像頭采集分辨率一樣的大小。否則,結果圖像將是有偏差的。

2.ImagePartSelecter 控件

  圖像區域選擇控件ImagePartSelecter的定義如下: 

復制代碼
public class ImagePartSelecter : UserControl {    // 當選擇的區域發生改變時,會觸發此事件。事件參數為原始圖片的選擇區域截圖。 public event CbGeneric<Bitmap> ImagePartSelected;         // 獲取結果圖片(原始圖片的選擇區域截圖)。 public Bitmap GetResultImage(); // 初始化。    // outputImgLen: 最終要輸出的正方形圖片的邊長。 public void Initialize(int outputImgLen); // 指定要被選取的圖片。 public void SetSourceImage(Image image); }
復制代碼

(1)將ImagePartSelecter控件拖到窗體上,調用Initialize方法初始化。

(2)調用SetSourceImage方法設置原始的頭像圖片,這樣,圖片會顯示在控件的表面,而且ImagePartSelecter會在圖像的上面繪制藍邊的正方形,我們可以通過拖動或改變這個正方形的大小,來指定選擇的區域。

(3)當區域指定好后,可以調用其GetResultImage方法,其就會返回最終的結果圖像(即指定區域內的圖像)。

(4)與HeadImagePanel控件不一樣的是,不需要將ImagePartSelecter控件的Size設置為與圖片一樣的大小,ImagePartSelecter內部會自動縮放并適應。 

三.源碼下載

   自拍頭像Demo(源碼)

   源碼就不貼出來了,大家下載自己看吧:)

  

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 精品久久久久久久一区二区手机版 | 最近最新中文字幕大全高清6 | 波多野结衣一区 | 久久久久国产免费 | 黄网站大全 | 久久精品中文字幕极品 | 亚洲精品蜜桃久久久久久 | 欧美激情一区二区三区在线播放 | 国产一区二区三区视频在线观看 | 美国a视频| 国产精品香蕉在线观看不卡 | 欧美日韩免费大片 | 在线观看美女网站 | 午夜小视频男女在线观看 | 国产精品成人观看视频网站 | 99精品福利| 一区二区三区四区在线免费观看 | 美国毛片网站 | 能免费看的黄色网址 | 91精品国产高清久久久久 | 老司机精品视频午夜免费视频 | 国产片免费看 | 日韩亚色| 久热在线视频精品网站 | 国产自产c区 | 国产美女福利视频福利 | 成人久久精品 | 免费中文字幕 | 精品亚洲成a人在线播放 | 黑人极品巨大videoshd | 日本成人一区 | 亚洲午夜久久久精品影院 | 爱爱小视频免费体验区在线观看 | 伊人五月 | 国产精品免费久久久免费 | 欧美成人一区亚洲一区 | 欧美另类精品xxxx人妖换性 | 国产精品爱久久 | 亚洲精品中文字幕乱码无线 | 意大利极品xxxxhd | 91精品欧美综合在线观看 |