<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C#實現聊天消息渲染、圖文混排(支持Windows、Linux)

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

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

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

             

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

      一.  支持的聊天消息類型

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

      (1)文本表情混排。

      (2)圖片,GIF 動圖。

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

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

      (5)引用消息。

      (6)語音消息。

      (7)語音通話。

      (8)視頻通話。 

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

      二. IChatRender 接口定義

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

            /// <summary>
              /// 渲染名片 
              /// </summary>
              /// <param name="msgID">聊天記錄ID</param>
              /// <param name="userID">發送者</param>
              /// <param name="cardUserID">名片上的個人ID</param>
              /// <param name="index">插入聊天記錄的位置,默認是放到最后面</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">文件狀態</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">默認傳null</param> 
              void AddChatItemImage(string msgID, string userID, object image, Size imgSize ,IProgressObserverable observerable = null, int? index = null);
      
              /// <summary>
              /// 渲染文本表情
              /// </summary> 
              /// <param name="text">內容,在渲染文本的內容中用 [000]來代表第一個表情,[001]即是二個表情,以此類推</param>
              /// <param name="referenced">引用內容可以是文本、圖片、文件或名片</param>
              /// <param name="textColor">文字顏色</param> 
              void AddChatItemText(string msgID, string userID, string text, ReferencedChatMessage referenced = null, Color? textColor = null, int? index = null);
      
              /// <summary>
              /// 渲染悄悄話,默認顯示內容—>> 悄悄話
              /// </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>
              /// 渲染系統消息
              /// </summary>
              /// <param name="msg">系統消息內容</param> 
              void AddChatItemSystemMessage(string msg, int? index = null);
      
              /// <summary>
              /// 渲染消息的發送時間
              /// </summary>
              /// <param name="dt">發送時間</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>
              /// 刪除對應的記錄
              /// </summary> 
              void RemoveChatMessage(string msgID);

      三.  創建 IChatRender 實例

             可以通過調用ESFramework.Extensions.ChatRendering.ChatRenderFactory 的靜態方法 CreateChatRender 創建一個 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);       

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

            第二個參數 則是要在其表面進行渲染的UI控件。 

      四. Demo 源碼下載

            ChatRenderDemo 源碼鏈接: Windows 端 + Linux 端 源碼

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

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

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

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

       注:Linux 端內置的是x86/x64非托管so庫,若需要其它架構的so,可以評論區留下email,到時我會發給大家。  

       

      posted @ 2023-02-06 14:56  zhuweisky  閱讀(4390)  評論(13)    收藏  舉報
      主站蜘蛛池模板: 色综合天天综合网天天看片 | 色狠狠色婷婷丁香五月| 亚洲午夜性猛春交xxxx| 中日韩黄色基地一二三区| 成人h动漫精品一区二区无码| 亚洲综合色丁香婷婷六月图片| 欧洲女人牲交性开放视频| 日韩精品一区二区三区激情| 老司机亚洲精品一区二区| 国产综合色一区二区三区| 成人中文在线| 国产不卡精品视频男人的天堂| 中文字幕人妻有码久视频| 欧洲人与动牲交α欧美精品| 国产综合久久99久久| 茶陵县| 久久国产成人精品国产成人亚洲| 国产一区二区三区四区激情| 国产精品乱码高清在线观看| 亚洲欧美激情在线一区| 少妇伦子伦精品无吗| 亚洲成色精品一二三区| 国产精品久久久久久久久鸭| 亚洲欧美另类久久久精品播放的 | 国产亚洲精品久久77777| 伊人狠狠色丁香婷婷综合| 久久久www成人免费精品| 久久久久亚洲AV色欲av| 人人妻人人狠人人爽天天综合网| 人人干人人噪人人摸| 欧美精品一区二区三区中文字幕 | 毛片内射久久久一区| 痉挛高潮喷水av无码免费| 深泽县| 999精品色在线播放| 成人性生交片无码免费看| av鲁丝一区鲁丝二区鲁丝三区 | 国产亚洲人成网站观看| 国产麻豆成人传媒免费观看| 国产女人18毛片水真多1| 国产成人精品18|