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

ASP.NET
asp.net neatUpload 支持大文件上传组件
ASP.net 动态加载控件时一些问题的总结
web用户控件调用.aspx页面里的方法
asp.net 继承自Page实现统一页面验证与错误处理
asp.net 文件下载实现代码
asp.net ToString()格式设置大全
.NET 水晶报表使用代码
c# NameValueCollection类读取配置信息
asp.net 不用组件的URL重写(适用于较大型项目)
.aspx中的命名空间设置实现代码
asp.net access web.config denied
JAVA正则表达式 Pattern和Matcher
asp.net 每天定点执行任务
asp.net fileupload 实现上传
asp.net slickupload 使用方法(文件上传)
asp.net 从客户端中检测到有潜在危险的 Request.Form 值错误解
关于asp.net button按钮的OnClick和OnClientClick事件
asp.net 权限管理分析
c# table 控件用法
asp.net repeater手写分页实例代码

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 209 ::
收藏到网摘: 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