Delphi下16进制位图数据转位图
如果我们在Form中拖入一个Image控件,并设置好picture后,Alt+F12就可以看到Form的源代码中已经将图片转成了16进制字符串,如下:http://www.pfeng.org/archives/290
那么在实际的应用中如何实现把图片转16进制呢,可以参考以下转换PNG的例子,其他格式的图片转换都基本类似:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
uses pngimage; {从 png 图片到十六进制字符串} function Png2Hex(png: TPngImage): string ; var stream: TMemoryStream; begin stream := TMemoryStream . Create; png . SaveToStream(stream); SetLength(Result, stream . Size * 2 ); BinToHex(stream . Memory, PChar (Result), stream . Size); stream . Free; end ; {从十六进制字符串恢复 png 图片} procedure Hex2Png(str: string ; out png: TPngImage); var stream: TMemoryStream; begin if not Assigned(png) then png := TPngImage . Create; stream := TMemoryStream . Create; stream . SetSize(Length(str) div 2 ); HexToBin( PChar (str), stream . Memory, stream . Size); png . LoadFromStream(stream); stream . Free; end ; {测试} procedure TForm1 . Button1Click(Sender: TObject); var png: TPngImage; begin png := TPngImage . Create; png . LoadFromFile( 'c:\temp\test.png' ); Memo1 . Text := Png2Hex(png); png . Free; end ; procedure TForm1 . Button2Click(Sender: TObject); var png: TPngImage; begin png := TPngImage . Create; Hex2Png(Memo1 . Text, png); Canvas . Draw( 0 , 0 , png); png . Free; end ; |
在个别时候,可能需要解析From源代码中生成的16进制图片,可以参考以下代码: