Tencent QQ皮肤图像文件格式Gft转png或bmp源代码
生活随笔
收集整理的這篇文章主要介紹了
Tencent QQ皮肤图像文件格式Gft转png或bmp源代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Tencent QQ皮膚圖像文件格式Gft轉png或bmp源代碼?
轉載自CSDN,另附Delphi版代碼:
http://topic.csdn.net/u/20111121/14/E545FC21-41CF-4341-BCA6-770AE91F9211.html
工具的作用是把Tencent公司QQ皮膚使用的Gft圖像格式,轉成Png或Bmp格式,當選擇包含Gft文件的文件夾時,支持批量轉換文件夾下及子文件夾下所有Gft文件。
此工具是喜歡制作QQ皮膚的美工朋友或喜歡仿QQ界面的開發人員必備工具。
此工具界面圖片,除Logo外,也都是直接使用的QQ皮膚中的圖片,版權歸騰訊公司所有。
程序截圖:?
?
?
下載地址: http://download.csdn.net/detail/psbeond/3821134?
========================================================================
以下為Delphi代碼:
?
? 1?{*******************************************************************************??2?
??3???Tencent?QQ??gft圖像格式轉換單元?轉換為BMP或PNG
??4?
??5???原作者?:??psbeond
??6???網??址?:??http://topic.csdn.net/u/20111121/14/E545FC21-41CF-4341-BCA6-770AE91F9211.html
??7??原始代碼:http://download.csdn.net/download/psbeond/3821134
??8?
??9???本人只是對C++代碼翻譯翻譯為Delphi代碼?不做其他處理
?10???如需解包RDB文件,請自行百度?“RDB打包解包工具”
?11?
?12?*******************************************************************************}
?13?
?14?unit?uGFT2Image;
?15?
?16?interface
?17?
?18?uses
?19???SysUtils,?Classes;
?20?
?21?const
?22???E_GFT_FILE_OPEN???????????=?-1;
?23???E_NOT_GFT_FILE???????????=?-2;
?24???E_NO_IMAGE_DATA???????????=?-3;
?25???E_NOT_SUPPORT_IMAGE?????=?-4;
?26?
?27?type
?28???TImageType?=?(IT_UNKNOWN,IT_BITMAP,IT_PNG);
?29?
?30?function?ConvertGft2Image(strGftFile:string;Image:TStream;var?ImageType:TImageType):Integer;
?31?
?32?implementation
?33?
?34?
?35?function?ConvertGft2Image(strGftFile:?string;
?36?Image:TStream;var?ImageType:TImageType):Integer;
?37?const
?38???//?Png?and?bmp?file?header
?39???btPngHeader?:?array?[0..7]?of?Byte?=?($89,?$50,?$4E,?$47,?$0D,?$0A,?$1A,?$0A);
?40???wBmpHeader??=?$4D42;
?41?var
?42???fpGft?:?TFileStream;
?43???nGftFileLength?:?Int64;
?44???btImageOffset??:?Byte;
?45???wHeader????????:?WORD;
?46???btHeader???????:?array?[0..7]?of?Byte;
?47???nImageLength???:?Integer;
?48?begin
?49???//?Open?gft?file
?50???if?not?FileExists(strGftFile)?then
?51?????begin
?52???????Result?:=?E_GFT_FILE_OPEN;
?53???????Exit;
?54?????end;??
?55???fpGft?:=?TFileStream.Create(strGftFile,fmOpenRead);
?56?
?57???//?Get?Gft?file?length.
?58???nGftFileLength?:=?fpGft.Size;
?59?
?60???//?The?byte?of?address?0x00000010?of?gft?file?is?specify?the?offset?of?image.
?61???if?nGftFileLength?<?17?then
?62?????begin
?63???????Result?:=?E_NOT_GFT_FILE;
?64???????Exit;
?65?????end;
?66?
?67???//?Get?image?offset
?68???//?Seek?to?byte?that?specify?the?offset?of?image.
?69???fpGft.Seek($00000010,soFromBeginning);
?70???fpGft.Read(btImageOffset,SizeOf(Byte));
?71???if?btImageOffset?+?2?>=?nGftFileLength?then
?72?????begin
?73???????Result?:=?E_NO_IMAGE_DATA;
?74???????Exit;
?75?????end;??
?76?
?77???//?Check?the?image?type.
?78???ImageType?:=?IT_UNKNOWN;
?79???fpGft.Seek(btImageOffset,soFromBeginning);
?80???fpGft.Read(wHeader,SizeOf(WORD));
?81???if?wHeader?=?wBmpHeader?then
?82?????ImageType?:=?IT_BITMAP
?83???else
?84?????begin
?85???????if?btImageOffset?+?8?>=?nGftFileLength?then
?86?????????begin
?87???????????Result?:=?E_NO_IMAGE_DATA;
?88???????????Exit;
?89?????????end;
?90?
?91???????fpGft.Seek(btImageOffset,soFromBeginning);
?92???????fpGft.Read(btHeader,SizeOf(Byte)*8);
?93???????
?94???????if?CompareMem(@btHeader,@btPngHeader,8)?then
?95?????????begin
?96???????????ImageType?:=?IT_PNG;
?97?????????end;
?98?????end;
?99?
100???if?ImageType?=?IT_UNKNOWN?then
101?????begin
102???????Result?:=?E_NOT_SUPPORT_IMAGE;
103???????Exit;
104?????end;
105?
106???//?Convert?gft?to?image
107???nImageLength?:=?nGftFileLength?-?btImageOffset;
108???if?nImageLength?<=?0?then
109?????begin
110???????Result?:=?E_NO_IMAGE_DATA;
111???????Exit;
112?????end;
113???fpGft.Seek(btImageOffset,soFromBeginning);
114???Image.Position?:=?0;
115???Image.CopyFrom(fpGft,nImageLength);
116???Image.Position?:=?0;
117???fpGft.Destroy;
118???Result?:=?0;
119?end;
120?end.?
另附Demo:
Gft2Image_Demo.rar?
轉載于:https://www.cnblogs.com/lahcs/archive/2011/11/24/2261718.html
總結
以上是生活随笔為你收集整理的Tencent QQ皮肤图像文件格式Gft转png或bmp源代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么从零开始学习网络工程师?华为大牛说:
- 下一篇: databinder.eval绑定数据的