聊天窗口中表情,图片,文件的显示处理

聊天对话框中,除了文字,一般还会有表情,图片,文件这些的显示。这些的处理都与文字的处理不一样。

1.表情的显示处理。

系统表情的话,一般都内置在程序中了,直接调用出来显示就可以了。自定义表情就跟图片的处理流程一样了。

eg:一个笑脸表情,发送者的程序里有这张图片,接收者的程序也有这张图片。那么这张图片就不需要通过文件传输发给接收者了,只需要发送一个标示过去告诉接收者这是哪一张系统表情图片就ok了。

我发了一个系统表情给你------》[笑脸]-----》接收到一个笑脸表情的标示----》在系统表情文件夹里找到笑脸图片-----》显示出来给你笑

2.图片的处理

图片的处理较之系统表情处理比较麻烦。发送者有这张图片,接收者不一定有这张图片。发送一个图片标示的做法是行不通了,必须将文件图片发给接收者才可以。

简单的解决方案:

我发了一张图片给你------》图片文件具体数据----》接收到一个文件{此次要检测文件是否传完}-----》显示出来???(你确定是图片,不是文件什么的)

改进a:

我发了一张图片给你-----》图片文件具体数据+[这是个图片]-----》接收到一个文件,标示为图片---》以图片的形式显示在对话框

ok,这样就差不多了。但是在实际操作中,图片的文件数据一般都比文字大得多,一张图片的大小甚至够你发一篇高考作文给对方了。

这样就有一个问题了,我发一张图片给你,耗时要10s(图片大,网络差),期间,我有发了些文字给你。结果:得等到图片完全接收完成才能显示出来后面的全部消息。如果一次性发送多张图,那你就等着哭吧。

改进b:

创建接收线程和聊天窗口线程分开,接收线程异步通知聊天窗口更新显示。创建文件接收线程用来接收文件。三个线程!!但是还是有问题:文字会先收到,图片后收到。

改进c:

采用(正在加载图片)先行占位,待图片传输完成替换掉。若传输失败(超时),用裂图替换掉。

嗯,差不多就这样了。文件的显示做法同图片。

实际操作中,采用单例模式定义一个用于接收图片的管理类。在三个线程中,要注意互斥问题。接收线程收到文件接收表示,启动文件接收线程去接收文件,并在管理类中压入该文件信息,文件传输完成要把管理类的文件状态置为已传输完成并通知聊天窗口显示。还有很多小细节问题,就不详细展开了。此次仅提供一个思路。

时间: 2024-08-10 23:30:22

聊天窗口中表情,图片,文件的显示处理的相关文章

将gridFS中的图片文件写入硬盘

开启用户验证下的gridfs 连接使用,在执行脚本前可以在python shell中 from pymongo import Connectionfrom gridfs import *con = Connection("mongodb://admin:[email protected]:27017")#用URI的方式建立数据库的链接,当然也有其他的方式进行授权,现在是mongodb的管理员帐号,普通帐号不知道为什么不可以,db = con['repository']#连接到具体的数据

FileReader:读取本地图片文件并显示

最近忙得比狗还惨,导致长时间没能更新文章,真心对不住啊.抽空整理了下关于在页面上读取和显示本地图片的实例文章,本文通过实例讲解如何使用支持FileReader浏览器的用户将能够通过一个file input选择一个图片文件,并不经过上传而直接将图片显示在页面中. 查看演示 要想在页面上显示本地图片,以前我们通常的做法是将选择的图片文件上传至后端服务器,后端对其进行存储,再将图片的URL返回到前端,前端通过这个URL来显示图片.而HTML5的FileReader接口支持本地预览,FileReader

在PictureBox中打开图片文件

public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void import_Click(object sender, EventArgs e) { OpenFileDialog openfile = new OpenFileDialog(); openfile.Filter = "jpg类型图片(*.jpg)|*.jpg|BMP类型图片(*.bmp)|*.bmp";

Android 通过API获取数据库中的图片文件

Overview 今天复习了一下Android 如何将我们数据库中图片获取出来,并且将其转换为bitmap进行显示. 开发环境以及技术 使用Visual Studio 2019 Android Studio 3.5 API 使用 ASP .NET WEB API 开发 数据库操作只用Entity Framework 使用本地数据库作为数据源 如果你是一个需要开发软件和API的程序员,那么你可以看一下,如果你不是可以选择跳过 $\color{#6995C2}{API开发}$. API 开发 这里我

mongodb中获取图片文件<标记>

获取图片文件 @RequestMapping(value="/downLoadFileFormMongo.do",method=RequestMethod.GET) @ResponseBody public void downLoadFileFormMongo(HttpServletRequest request,HttpServletResponse response ) throws Exception { String filename=request.getParameter(

Android中如何下载文件并显示下载进度

原文地址:http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/1125/2057.html 这里主要讨论三种方式:AsyncTask.Service和使用DownloadManager. 一.使用AsyncTask并在进度对话框中显示下载进度 这种方式的优势是你可以在后台执行下载任务的同时,也可以更新UI(这里我们用progress bar来更新下载进度) 下面的代码是使用的例子 1 // declare the dialog as a

sharepoint column中的图片链接不能显示为图片

在sharepoint的list中定义了一个Calculated (calculation based on other columns) 类型的column,需要自动根据条件显示相对应的图片. 在Formula 中输入了以下代码: =IF([kpi status]="on time","/_layouts/images/kpipeppers-0.gif",IF([kpi status]="delay","/_layouts/image

由于TableView的Section的头部和尾部高度设置的不规范引起的部分Section中的图片无法正常显示

当tableview的组的头部和尾部的高度设置如下时: -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{ return 10; } /** 组脚高度 */ -(CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section{ return 0.1; } 出现图

linux下,将一个目录中的图片文件合成为gif图片

# {0} 为文件所在目录位置 # {1} 为gif图片位置 convert -delay 30 -depth 8 -layers optimize -quality 80 -loop 0 {0} {1} 原文地址:https://www.cnblogs.com/dadream/p/9759521.html