1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Tencent QQ皮肤图像文件格式Gft转png或bmp源代码

Tencent QQ皮肤图像文件格式Gft转png或bmp源代码

时间:2023-01-21 02:34:19

相关推荐

Tencent QQ皮肤图像文件格式Gft转png或bmp源代码

Tencent QQ皮肤图像文件格式Gft转png或bmp源代码

转载自CSDN,另附Delphi版代码:

/u/1121/14/E545FC21-41CF-4341-BCA6-770AE91F9211.html

工具是为制作QQ皮肤的人准备的,源代码是为vc程序员准备的。本压缩包即提供编译好的可执行程序,又提供了程序的源代码。

工具的作用是把Tencent公司QQ皮肤使用的Gft图像格式,转成Png或Bmp格式,当选择包含Gft文件的文件夹时,支持批量转换文件夹下及子文件夹下所有Gft文件。

此工具是喜欢制作QQ皮肤的美工朋友或喜欢仿QQ界面的开发人员必备工具。

此工具界面图片,除Logo外,也都是直接使用的QQ皮肤中的图片,版权归腾讯公司所有。

程序截图:

下载地址: /detail/psbeond/3821134

========================================================================

以下为Delphi代码:

1{*******************************************************************************

2

3TencentQQgft图像格式转换单元转换为BMP或PNG

4

5原作者:psbeond

6网址:/u/1121/14/E545FC21-41CF-4341-BCA6-770AE91F9211.html

7原始代码:/download/psbeond/3821134

8

9本人只是对C++代码翻译翻译为Delphi代码不做其他处理

10如需解包RDB文件,请自行百度“RDB打包解包工具”

11

12*******************************************************************************}

13

14unituGFT2Image;

15

16interface

17

18uses

19SysUtils,Classes;

20

21const

22E_GFT_FILE_OPEN=-1;

23E_NOT_GFT_FILE=-2;

24E_NO_IMAGE_DATA=-3;

25E_NOT_SUPPORT_IMAGE=-4;

26

27type

28TImageType=(IT_UNKNOWN,IT_BITMAP,IT_PNG);

29

30functionConvertGft2Image(strGftFile:string;Image:TStream;varImageType:TImageType):Integer;

31

32implementation

33

34

35functionConvertGft2Image(strGftFile:string;

36Image:TStream;varImageType:TImageType):Integer;

37const

38//Pngandbmpfileheader

39btPngHeader:array[0..7]ofByte=($89,$50,$4E,$47,$0D,$0A,$1A,$0A);

40wBmpHeader=$4D42;

41var

42fpGft:TFileStream;

43nGftFileLength:Int64;

44btImageOffset:Byte;

45wHeader:WORD;

46btHeader:array[0..7]ofByte;

47nImageLength:Integer;

48begin

49//Opengftfile

50ifnotFileExists(strGftFile)then

51begin

52Result:=E_GFT_FILE_OPEN;

53Exit;

54end;

55fpGft:=TFileStream.Create(strGftFile,fmOpenRead);

56

57//GetGftfilelength.

58nGftFileLength:=fpGft.Size;

59

60//Thebyteofaddress0x00000010ofgftfileisspecifytheoffsetofimage.

61ifnGftFileLength<17then

62begin

63Result:=E_NOT_GFT_FILE;

64Exit;

65end;

66

67//Getimageoffset

68//Seektobytethatspecifytheoffsetofimage.

69fpGft.Seek($00000010,soFromBeginning);

70fpGft.Read(btImageOffset,SizeOf(Byte));

71ifbtImageOffset+2>=nGftFileLengththen

72begin

73Result:=E_NO_IMAGE_DATA;

74Exit;

75end;

76

77//Checktheimagetype.

78ImageType:=IT_UNKNOWN;

79fpGft.Seek(btImageOffset,soFromBeginning);

80fpGft.Read(wHeader,SizeOf(WORD));

81ifwHeader=wBmpHeaderthen

82ImageType:=IT_BITMAP

83else

84begin

85ifbtImageOffset+8>=nGftFileLengththen

86begin

87Result:=E_NO_IMAGE_DATA;

88Exit;

89end;

90

91fpGft.Seek(btImageOffset,soFromBeginning);

92fpGft.Read(btHeader,SizeOf(Byte)*8);

93

94ifCompareMem(@btHeader,@btPngHeader,8)then

95begin

96ImageType:=IT_PNG;

97end;

98end;

99

100ifImageType=IT_UNKNOWNthen

101begin

102Result:=E_NOT_SUPPORT_IMAGE;

103Exit;

104end;

105

106//Convertgfttoimage

107nImageLength:=nGftFileLength-btImageOffset;

108ifnImageLength<=0then

109begin

110Result:=E_NO_IMAGE_DATA;

111Exit;

112end;

113fpGft.Seek(btImageOffset,soFromBeginning);

114Image.Position:=0;

115Image.CopyFrom(fpGft,nImageLength);

116Image.Position:=0;

117fpGft.Destroy;

118Result:=0;

119end;

120end.

另附Demo:

Gft2Image_Demo.rar

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。