新的学期又开始了,刚到学校,好久没上网了,上网后发现QQ2011已经发布了测试版了。下载一看,皮肤又有了新的进化。用QQ皮肤工具解包QQ2011后发现大多的图片已被gft文件所替代了,用了几款图片工具均无法查看gft的图片内容。看来是腾讯自己定义的文件格式。
打开了UltraEdit,把几个gft文件拖进去看了看。。。
如上图,这样我们就可以制作一个将gft文件转换成png或是bmp的工具了。
我们执行将需要转换的gft文件或含有gft文件的文件夹拖拽到窗体上面之后便会自动转换所有文件。


///
<summary>
/// gft文件路径
/// </summary>
/// <param name="fileName"></param>
private void ConvertFile( string fileName)
{
string ext = string .Empty;
FileStream fs = File.OpenRead(fileName);
byte [] data = new byte [fs.Length];
fs.Read(data, 0 , data.Length);
fs.Close();
int key = data[ 16 ]; // 第16个字指定了图片的起始地址。
byte [] data2 = data.Skip(key).ToArray();
if (data2[ 0 ].ToString( " x " ) == " 42 " ) // 42 4D
{
ext = " bmp " ;
}
else if (data2[ 0 ].ToString( " x " ) == " 89 " ) // 80 50
{
ext = " png " ;
}
string newFilename = Path.ChangeExtension(fileName, ext);
FileStream fs2 = new FileStream(newFilename, FileMode.Create);
fs2.Write(data2, 0 , data2.Length);
fs2.Close();
CompletedCount ++ ;
progressBar1.Value = CompletedCount;
}
/// gft文件路径
/// </summary>
/// <param name="fileName"></param>
private void ConvertFile( string fileName)
{
string ext = string .Empty;
FileStream fs = File.OpenRead(fileName);
byte [] data = new byte [fs.Length];
fs.Read(data, 0 , data.Length);
fs.Close();
int key = data[ 16 ]; // 第16个字指定了图片的起始地址。
byte [] data2 = data.Skip(key).ToArray();
if (data2[ 0 ].ToString( " x " ) == " 42 " ) // 42 4D
{
ext = " bmp " ;
}
else if (data2[ 0 ].ToString( " x " ) == " 89 " ) // 80 50
{
ext = " png " ;
}
string newFilename = Path.ChangeExtension(fileName, ext);
FileStream fs2 = new FileStream(newFilename, FileMode.Create);
fs2.Write(data2, 0 , data2.Length);
fs2.Close();
CompletedCount ++ ;
progressBar1.Value = CompletedCount;
}
多余的代码就不贴了,附下载。
QQ皮肤解包工具下载。