当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 编程实现QQ表情文件CFC格式

ASP.NET
asp.net 数据库的连接和datatable类
代码实现打印功能(asp.net+javascript)
asp.net 读取xml文件里面的内容,绑定到dropdownlist中
asp.net 执行事务代码
asp.net 对中文汉字的加密与解密代码
asp.net 下载文件时输出文件内容
asp.net TextBox控件设置ReadOnly后,不能回传。
c# 执行事务函数代码
asp.net 面试 笔试题目[附答案]
asp.net利用google的api做翻译
asp.ne去除html的函数代码
C# 添加图片水印类实现代码
Silverlight融合ajax实现前后台数据交互
mssql 存储过程调用C#编写的DLL文件
asp.net 需要登陆的网站上下载网页源代码和文件
asp.net cookie的操作,写入、读取与操作
asp.net textarea换行函数代码
.NET发起web请求时维持Session
asp.net 身份验证(最简单篇)
asp.net 身份验证(分目录验证篇)

ASP.NET 中的 编程实现QQ表情文件CFC格式


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 200 ::
收藏到网摘: n/a

 

背景:最近闲来无事,也应论坛某会员要求,想做个QQ表情下载的站点。本来事情是很简单的,写个小小的CRUD也就可以了,但嘻哈呵嘿既然是个.Net程序员,当然要使用.Net来实现了。今天我们就用.Net来实现CFC ( custom face cab? ) 的表情格式的打包功能。

要做到这个功能,我们必须先了解这个格式,首先Google一下。我们找到了这一篇来自清华大学的文章:FC文件格式详解

从这篇文章里我们得知了CFC的文件格式大概如下:

 

一个块有15个字段,如下

md5的字符串形式长度,4个字节
快捷键长度,4字节
表情名称长度,4字节
表情文件名长度,4字节
表情文件长度,4字节
微缩图文件名长度,4字节
微缩文件长度,4字节
表情文件帧数,4字节
图片md5的字符串形式
快捷键
表情名称
表情文件名
微缩图文件名
表情文件内容
微缩图内容
知道了格式就好办了,我们按步就班定义一个结构(struct)
 1    Struct#region Struct
 2    public struct FaceBlock
 3    {
 4        public uint MD5Length; //32
 5        public uint uintcutLength; //4
 6        public uint FaceNameLength; //4
 7        public uint FaceFileNameLength; //36 md5 + extension
 8        public uint FileLength;
 9        public uint ThumbnailFileNameLength; //41 md5 + fixed.bmp
10        public uint ThumbnailFileLength;
11        public uint FrameLength;
12        public string MD5;
13        public string uintcuts;
14        public string FaceName;
15        public string FaceFileName;
16        public string ThumbnailFileName;
17        public byte[] FaceData;
18        public byte[] ThumbnailData;
19
20        public static FaceBlock FromImage(string file)
21        {
22            return FaceHelper.GetFaceBlockFromImage(file);
23        }
24
25        byte[] GetBytes(uint value)
26        {
27            byte[] bt = BitConverter.GetBytes(value);
28            List<byte> bytes = new List<byte>();
29            bytes.AddRange(bt);
30            if (bytes.Count < 4)
31            {
32                int l = 4 - bytes.Count;


33                for (int i = 0; i < l; i++)
34                    bytes.Add((byte)0);
35            }
36            return bytes.ToArray();
37        }
38
39        public byte[] ToBytes()
40        {
41            List<byte> bytes = new List<byte>();
42            Encoding