在qq(飞信)中我们输入"/微笑"到聊天窗口中就可以显示为微笑的图片。
如何实现这种“文本->图片”的转换,这就使用到了多叉树的数据结构。整个过程需要三步:
第一步:准备好表情资源。
首先说以下表情图片的特殊性,由于表情都是png格式,为了节省空间将所有表情合成为一张png图片。
拿表情前3个,微笑 大笑眨眼 为例,每一个表情定义一个结构体
structEmotionDataBase
{
m_EmotionIndex //表情的序号
m_EmotionName //表情名字
m_EmotionTrace //其他信息
m_pBmp //表情图片
}
我们给“微笑”,“大笑”,“眨眼”三个表情进行编号(index)1000,1001,1002。由于表情并定义一个map<int , EmotionDataBase>,目的是通过index可以找到表情所有信息。程序启动后,将表情大图拆分成小图放到EmotionDataBase里,同时将表情的名字也放到EmotionDataBase里。
到此,表情资源map已经准备好了。
第二步:创建表情多叉树。
下面是多叉树的结构。当然这个结构很简单,因为除了遍历没有其他操作。
class EmotionTreeNode
{
public:
int m_EmotionIndex;//表情index
CPChar m_EmotionSymbol;//表情单个字符
vector<EmotionTreeNode*>* m_Child;//孩子
}
第三步,遍历多叉树找到表情的index。
多叉树的叶子节点存储的就是这些编号1000,1001等等。然后用这个编号到表情map资源里找到对应的图片,最后显示出来图片即可。
源码我放到:http://download.csdn.net/detail/hherima/5161117