最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實現(xiàn)聊天消息渲染與圖文混排詳解

 更新時間:2023年02月06日 15:48:44   作者:zhuweisky  
在實現(xiàn)聊天軟件時,渲染文字表情圖文混排是一項非常繁瑣的工作,再加上還要支持GIF動圖、引用消息、撤回消息、名片等不同樣式的消息渲染時,就更加麻煩了。本文就來和大家分享一下具體實現(xiàn)方法,希望對大家有所幫助

在實現(xiàn)聊天軟件時,渲染文字表情圖文混排是一項非常繁瑣的工作,再加上還要支持GIF動圖、引用消息、撤回消息、名片等不同樣式的消息渲染時,就更加麻煩了。

好在我們可以使用 ESFramework 提供的 IChatRender 組件,使用它我們就能輕松實現(xiàn)類似于微信聊天消息的渲染效果。IChatRender 支持 Windows、Linux(包括國產(chǎn)OS)。在Windows平臺上提供了基于 WinForm 和基于 WPF 的實現(xiàn),在Linux上則是基于.NET Core 實現(xiàn)的。

廢話不多說,先上張渲染Demo的效果圖(該Demo源碼可于文末下載):   

效果還不錯吧!下面我們就簡單介紹下如何使用 IChatRender 實現(xiàn)上圖所展示的渲染效果,大家下載源碼對照著看,會更容易理解。

一.支持的聊天消息類型

IChatRender 支持渲染的聊天消息類型包括: 

(1)文本表情混排。

(2)圖片,GIF 動圖。

(3)文件傳輸進(jìn)度及控制。

(4)個人名片、群名片。

(5)引用消息。

(6)語音消息。

(7)語音通話。

(8)視頻通話。 

(9)撤回消息、刪除消息。       

二.IChatRender 接口定義

IChatRender 接口的定義具體如下所示:

/// <summary>
        /// 渲染名片 
        /// </summary>
        /// <param name="msgID">聊天記錄ID</param>
        /// <param name="userID">發(fā)送者</param>
        /// <param name="cardUserID">名片上的個人ID</param>
        /// <param name="index">插入聊天記錄的位置,默認(rèn)是放到最后面</param>
        void AddChatItemCard(string msgID ,string userID, string cardUserID ,int? index = null);

        /// <summary>
        /// 渲染文件 
        /// </summary> 
        /// <param name="fileName">文件名稱</param>
        /// <param name="fileSize">文件大小</param>
        /// <param name="state">文件狀態(tài)</param> 
        void AddChatItemFile(string msgID, string userID, string fileName, ulong fileSize, FileTransState state, int? index = null);

        /// <summary>
        /// 渲染圖片
        /// </summary> 
        /// <param name="image">圖像</param>
        /// <param name="imgSize">圖像大小</param>
        /// <param name="observerable">默認(rèn)傳null</param> 
        void AddChatItemImage(string msgID, string userID, object image, Size imgSize ,IProgressObserverable observerable = null, int? index = null);

        /// <summary>
        /// 渲染文本表情
        /// </summary> 
        /// <param name="text">內(nèi)容,在渲染文本的內(nèi)容中用 [000]來代表第一個表情,[001]即是二個表情,以此類推</param>
        /// <param name="referenced">引用內(nèi)容可以是文本、圖片、文件或名片</param>
        /// <param name="textColor">文字顏色</param> 
        void AddChatItemText(string msgID, string userID, string text, ReferencedChatMessage referenced = null, Color? textColor = null, int? index = null);

        /// <summary>
        /// 渲染悄悄話,默認(rèn)顯示內(nèi)容—>> 悄悄話
        /// </summary> 
        void AddChatItemSnap(string msgID, string userID, int? index = null);

        /// <summary>
        /// 渲染語音消息
        /// </summary> 
        /// <param name="audioMessageSecs">語音時長</param>
        /// <param name="audioMessage">語音短信</param> 
        void AddChatItemAudio(string msgID, string userID, int audioMessageSecs, object audioMessage, int? index = null);

        /// <summary>
        /// 渲染多媒體通話類型
        /// </summary> 
        /// <param name="duration">通話時長</param>
        /// <param name="isAudioCommunicate">通話類型(語音/視頻)</param> 
        void AddChatItemMedia(string msgID, string userID, string duration, bool isAudioCommunicate, int? index = null); 

        /// <summary>
        /// 渲染系統(tǒng)消息
        /// </summary>
        /// <param name="msg">系統(tǒng)消息內(nèi)容</param> 
        void AddChatItemSystemMessage(string msg, int? index = null);

        /// <summary>
        /// 渲染消息的發(fā)送時間
        /// </summary>
        /// <param name="dt">發(fā)送時間</param> 
        void AddChatItemTime(DateTime dt, int? index = null);   

        /// <summary>
        /// 自己撤回消息 
        /// </summary> 
        void RecallChatMessage(string msgID);

        /// <summary>
        /// 其他用戶撤回消息 
        /// </summary> 
        /// <param name="operatorName">操作者</param>
        void RecallChatMessage(string msgID ,string operatorName);

        /// <summary>
        /// 刪除對應(yīng)的記錄
        /// </summary> 
        void RemoveChatMessage(string msgID);

三. 創(chuàng)建 IChatRender 實例

可以通過調(diào)用ESFramework.Extensions.ChatRendering.ChatRenderFactory 的靜態(tài)方法 CreateChatRender 創(chuàng)建一個 IChatRender 實例。

/// <param name="provider">提供必要的信息給聊天渲染器</param>
        /// <param name="ctrl">要在其表面渲染的UI控件</param>
        /// <param name="myID">自己的ID</param>
        /// <param name="destID">對方ID、或群ID</param>
        /// <param name="isGroup">群聊/單聊</param>
        /// <returns></returns>
        public static IChatRender CreateChatRender(IRenderDataProvider provider, IChatControl ctrl, string myID, string destID, bool isGroup);

第一個參數(shù) IRenderDataProvider 用于在 IChatRender  渲染時,能從該接口獲取必要的信息(如用戶的頭像、名稱、表情圖片等)。 

第二個參數(shù) 則是要在其表面進(jìn)行渲染的UI控件。 

四. Demo 源碼下載

ChatRenderDemo 源碼鏈接: Windows 端 + Linux 端 源碼 提取碼:6daw

源碼解決方案中包括三個項目:

(1)ChatRenderDemo.WPF:   該Demo的Windows端(基于WPF)。

(2)ChatRenderDemo.WinForm: 該Demo的Windows端(基于WinForm)。 

(3)ChatRenderDemo.Linux:     該Demo的Linux客戶端(基于.NetCore),支持在統(tǒng)信UOS、銀河麒麟等國產(chǎn)OS上運(yùn)行。  

注:Linux 端內(nèi)置的是x86/x64非托管so庫,若需要其它架構(gòu)的so,可以評論區(qū)留下email,到時我會發(fā)給大家。  

以上就是C#實現(xiàn)聊天消息渲染與圖文混排詳解的詳細(xì)內(nèi)容,更多關(guān)于C#聊天消息渲染圖文混排的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#byte數(shù)組傳入C操作方法

    C#byte數(shù)組傳入C操作方法

    在本篇內(nèi)容中小編給大家分享了關(guān)于C#byte數(shù)組傳入C操作方法以及相關(guān)知識點,需要的朋友們學(xué)習(xí)下。
    2019-02-02
  • C/C++ 傳遞動態(tài)內(nèi)存的深入理解

    C/C++ 傳遞動態(tài)內(nèi)存的深入理解

    本篇文章是對C/C++中的傳遞動態(tài)內(nèi)存進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 詳解c#索引(Index)和范圍(Range)

    詳解c#索引(Index)和范圍(Range)

    這篇文章主要介紹了c#索引(Index)和范圍(Range)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-10-10
  • C# DataTable數(shù)據(jù)遍歷優(yōu)化詳解

    C# DataTable數(shù)據(jù)遍歷優(yōu)化詳解

    這篇文章主要介紹了C# DataTable數(shù)據(jù)遍歷優(yōu)化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • C# Task Cancellation使用總結(jié)

    C# Task Cancellation使用總結(jié)

    本文主要介紹了在使用CancellationTokenSource取消任務(wù)時的行為,以及如何使用Task的ContinueWith方法來處理任務(wù)的延續(xù)
    2024-12-12
  • C# Form自定義光標(biāo)的簡單實現(xiàn)

    C# Form自定義光標(biāo)的簡單實現(xiàn)

    這篇文章主要介紹了C# Form自定義光標(biāo)的簡單實現(xiàn),有需要的朋友可以參考一下
    2014-01-01
  • C# 拷貝數(shù)組的幾種方法(總結(jié))

    C# 拷貝數(shù)組的幾種方法(總結(jié))

    下面小編就為大家?guī)硪黄狢# 拷貝數(shù)組的幾種方法(總結(jié))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • C#純代碼實現(xiàn)打字游戲

    C#純代碼實現(xiàn)打字游戲

    這篇文章主要介紹了這篇文章主要為大家詳細(xì)介紹了C#純代碼實現(xiàn)打字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Unity實現(xiàn)物體左右移動效果

    Unity實現(xiàn)物體左右移動效果

    這篇文章主要為大家詳細(xì)介紹了Unity實現(xiàn)物體左右移動效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • C#中Arraylist的sort函數(shù)用法實例分析

    C#中Arraylist的sort函數(shù)用法實例分析

    這篇文章主要介紹了C#中Arraylist的sort函數(shù)用法,較為詳細(xì)的分析了ArrayList的sort函數(shù)的功能、定義及具體使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10

最新評論

自贡市| 东源县| 依兰县| 昂仁县| 巴中市| 万全县| 罗江县| 始兴县| 福泉市| 绥德县| 无锡市| 永昌县| 汉阴县| 宁河县| 富锦市| 宜兰市| 桑日县| 泸州市| 延长县| 日喀则市| 融水| 疏勒县| 凤翔县| 五寨县| 靖宇县| 全椒县| 九江市| 保定市| 甘泉县| 黔江区| 商丘市| 方山县| 沧州市| 庄河市| 江山市| 洪江市| 钦州市| 满城县| 乌鲁木齐市| 江西省| 牙克石市|