太有用了,所以转:Delphi下16进制位图数据转位图
如果我们在Form中拖入一个Image控件,并设置好picture后,Alt+F12就可以看到Form的源代码中已经将图片转成了16进制字符串,如下:
object Image1: TImage
Left =
Top =
Width =
Height =
Picture.Data = {
07544269746D61703E040000424D3E0400000000000036000000280000000700
00002B000000010018000000000008040000C40E0000C40E0000000000000000
0001BBE7F4BCE8F5BDE9F6BBE7F4BDE9F6BFEBF8BEEAF7000000B0E9F2B0E9F2
B0E9F2B0E9F2B1EAF3B2EBF4B1EAF3000000ADE5F8ADE5F8ACE4F7ADE5F8ACE4
F7AAE2F5ABE3F60000009DE4F89DE4F89DE4F89DE4F89DE4F89DE4F89DE4F800
00009DE4F89DE4F89DE4F89DE4F89DE4F89DE4F89DE4F80000009BE4F89BE4F8
9BE4F89BE4F89BE4F89BE4F89BE4F80000009BE4F89BE4F89BE4F89BE4F89BE4
F89BE4F89BE4F80000009BE4F89BE4F89BE4F89BE4F89BE4F89BE4F89BE4F800
00009EE5F99EE5F99EE5F99EE5F99EE5F99EE5F99EE5F9000000A0E5F9A0E5F9
A0E5F9A0E5F9A0E5F9A0E5F9A0E5F9000000A1E4F9A1E4F9A1E4F9A1E4F9A1E4
F9A1E4F9A1E4F9000000A1E6F9A1E6F9A1E6F9A1E6F9A1E6F9A1E6F9A1E6F900
0000A2E6F9A2E6F9A2E6F9A2E6F9A2E6F9A2E6F9A2E6F9000000A2E6F9A2E6F9
A2E6F9A2E6F9A2E6F9A2E6F9A2E6F9000000A5E6FBA5E6FBA5E6FBA5E6FBA5E6
FBA5E6FBA5E6FB000000A8E7FBA8E7FBA8E7FBA8E7FBA8E7FBA8E7FBA8E7FB00
0000AAE7FBAAE7FBAAE7FBAAE7FBAAE7FBAAE7FBAAE7FB000000AAE8FAAAE8FA
AAE8FAAAE8FAAAE8FAAAE8FAAAE8FA000000ABE9F9ABE9F9ABE9F9ABE9F9ABE9
F9ABE9F9ABE9F9000000AEE9F9AEE9F9AEE9F9AEE9F9AEE9F9AEE9F9AEE9F900
0000B1E9FAB1E9FAB1E9FAB1E9FAB1E9FAB1E9FAB1E9FA000000B1E9FAB1E9FA
B1E9FAB1E9FAB1E9FAB1E9FAB1E9FA000000B4EAFBB4EAFBB4EAFBB4EAFBB4EA
FBB4EAFBB4EAFB000000B7EBFBB7EBFBB7EBFBB7EBFBB7EBFBB7EBFBB7EBFB00
0000B9ECFCB9ECFCB9ECFCB9ECFCB9ECFCB9ECFCB9ECFC000000B9ECFCB9ECFC
B9ECFCB9ECFCB9ECFCB9ECFCB9ECFC000000B9ECFCB9ECFCB9ECFCB9ECFCB9EC
FCB9ECFCB9ECFC000000C0EDFBC0EDFBC0EDFBC0EDFBC0EDFBC0EDFBC0EDFB00
0000C0EDFBC0EDFBC0EDFBC0EDFBC0EDFBC0EDFBC0EDFB000000C2EEFBC2EEFB
C2EEFBC2EEFBC2EEFBC2EEFBC2EEFB000000C3EFFCC3EFFCC3EFFCC3EFFCC3EF
FCC3EFFCC3EFFC000000C5EFFBC5EFFBC5EFFBC5EFFBC5EFFBC5EFFBC5EFFB00
0000C8F0FCC8F0FCC8F0FCC8F0FCC8F0FCC8F0FCC8F0FC000000CAF1FACAF1FA
CAF1FACAF1FACAF1FACAF1FACAF1FA000000CBF2FBCBF2FBCBF2FBCBF2FBCBF2
FBCBF2FBCBF2FB000000CEF1FBCEF1FBCEF1FBCEF1FBCEF1FBCEF1FBCEF1FB00
0000CEF1FBCEF1FBCEF1FBCEF1FBCEF1FBCEF1FBCEF1FB000000CFF2FCCFF2FC
CFF2FCCFF2FCCFF2FCCFF2FCCFF2FC000000D2F2FDD2F2FDD2F2FDD2F2FDD2F2
FDD2F2FDD2F2FD000000D2F3FCD2F3FCD2F3FCD2F3FCD2F3FCD2F3FCD2F3FC00
0000D4F3FCD4F3FCD4F3FCD4F3FCD4F3FCD4F3FCD4F3FC000000D4F3FCD4F3FC
D4F3FCD4F3FCD4F3FCD4F3FCD4F3FC000000D4F3FCD4F3FCD4F3FCD4F3FCD4F3
FCD4F3FCD4F3FC000000}
end
那么在实际的应用中如何实现把图片转16进制呢,可以参考以下转换PNG的例子,其他格式的图片转换都基本类似:
uses pngimage;
{从 png 图片到十六进制字符串}
function Png2Hex(png: TPngImage): string;
var
stream: TMemoryStream;
begin
stream := TMemoryStream.Create;
png.SaveToStream(stream);
SetLength(Result, stream.Size * );
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 );
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(, , png);
png.Free;
end;
请注意,这点特别重要:
在个别时候,可能需要解析From源代码中生成的16进制图片,可以参考以下代码:
粘贴的时候,要去掉开头的一小段类信息:具体要看自己保存出来的图片字符串
由于我采用的pngimage控件中未找到TPngImage类,我通过修改改成一下代码
在我的代码中,我加载到TImage控件中的代码为:
{从 png 图片到十六进制字符串}
function Png2Hex(png: TPngObject): string;
var
stream: TMemoryStream;
begin
stream := TMemoryStream.Create;
png.SaveToStream(stream);
SetLength(Result, stream.Size * );
BinToHex(stream.Memory, PChar(Result), stream.Size);
stream.Free;
end;
{从十六进制字符串恢复 png 图片}
procedure Hex2Png(str: string; out png: TPngObject);
var
stream: TMemoryStream;
begin
if not Assigned(png) then png := TPngObject.Create;
stream := TMemoryStream.Create;
stream.SetSize(Length(str) div );
HexToBin(PChar(str), stream.Memory, stream.Size);
png.LoadFromStream(stream);
stream.Free;
end;
procedure TForm1.Button4Click(Sender: TObject);
var
png: TPngObject;
begin
//通过Image图片获取字符串
png := TPngObject.Create;
try
png.Assign(Image1.Picture.Graphic);
Memo1.Text:=Png2Hex(png);
finally
png.Free;
end;
end; procedure TForm1.Button5Click(Sender: TObject);
var
png: TPngObject;
begin
//通过字符串显示到Image图片
png := TPngObject.Create;
try
Hex2Png(Memo1.Text,png); Image1.Picture.Graphic.Assign(png);
finally
png.Free;
end;
end;
太有用了,所以转:Delphi下16进制位图数据转位图的更多相关文章
- Delphi下16进制位图数据转位图
如果我们在Form中拖入一个Image控件,并设置好picture后,Alt+F12就可以看到Form的源代码中已经将图片转成了16进制字符串,如下: ? 1 2 3 4 5 6 7 8 9 10 1 ...
- C# 发送16进制串口数据
一个困扰两天的问题:需要通过串口向设备发送的数据:0A010 7e 08 00 11 00 00 7e 76 7f我先将每个16进制字符转换成10进制,再将其转换成ASCII码对应的字符. /// & ...
- Delphi 实现16进制转字符串及字符串(中文)转16进制
//-----------------------------------------------//16进制字符转整数,16进制字符与字符串转换中间函数//--------------------- ...
- linux shell下16进制 “\uxxxx” unicode to UTF-8中文
问题出现背景: 项目中有个通过ip获取归属地城市需求,我是直接通过新浪的ip归属查询接口来获取的.我使用的是shell脚本调用 RESULT=$(curl -s 'http://int.dpool.s ...
- C#下16进制和BCD码转换代码
private static Byte[] ConvertFrom(string strTemp) { try { if (Convert.ToBoolean(strTemp.Length & ...
- 华为交换机Stelnet ssh/rsa验证模式下16进制公钥生成方法
1.生成秘钥 需要在你自己电脑上生成 执行下面命令,默认生成位置是~/.ssh ssh-keygen -t rsa -b 1024 -f yourkeyname -C "备注" 参 ...
- 【CCS仿真】用matlab把CCS保存的32位16进制的数据转换为十进制的数
2013-12-04 16:37:28 使用fscanf函数即可完成. 例如,CCS保存的.dat文件Copy_of_forward_i_f.dat如下: 1651 1 81008800 0 4000 ...
- delphi 中字符串与16进制、10进制转换函数
//字符串转成16进制代码function strToHexStr(str:string):string;varc:char;ss:string;i:integer;beginwhile str& ...
- C# 进制转换 在什么情况下使用16进制,字节数组,字符串
C# 进制转换 Admin2013年9月18日 名人名言:从工作里爱了生命,就是通彻了生命最深的秘密.——纪伯伦 1.请问c#中如何将十进制数的字符串转化成十六进制数的字符串 //十进制转二进制Con ...
随机推荐
- Hive与Hbase关系整合
近期工作用到了Hive与Hbase的关系整合,虽然从网上参考了很多的资料,但是大多数讲的都不是很细,于是决定将这块知识点好好总结一下供大家分享,共同掌握! 本篇文章在具体介绍Hive与Hbase整合之 ...
- 构造代码块、构造函数、this执行顺序
一.构造函数 对象一建立就会调用与之对应的构造函数. 构造函数的作用:可以用于给对象进行初始化. 构造函数的小细节:当一个类中没有定义构造函数时,系统会默认给该类加一个空参数的构造函数:当在类中自定义 ...
- js常用方法(。。。。不完整)
lastIndexOf();substring();split();slice();splice(); var s="http://www.baidu.com"; var unit ...
- [原创] hadoop学习笔记:重新格式化HDFS文件系统
所谓的重新格式化HDFS文件系统,实际意味着重新的创建一个HDFS文件系统.也就是说,必须将先前的已经有的文件系统配置删除.如下: 笔者采用的是最小化安装 这个是core-site.xml配置 这个是 ...
- 监控MySQL的脚本
#!/bin/bash res=`netstat -lntup | grep | awk -F '[ :]+' '{print $5}'` " ];then echo "Mysql ...
- 利用etcd及confd实现配置自动管理
ETCD etcd 架设etcd集群 静态启动etcd集群需要每个成员在集群中知道另一个成员.在许多情况下,集群成员的IP可能提前未知.在这种情况下,可以使用etcd集群的自动发现服务.一旦etcd集 ...
- 百度编辑器 Ueditor 如何增加字体 ?
在百度编辑器 Ueditor 如何增加字体 ? 要修改两个文件: 第一个文件:editor-config.js: ,'fontfamily':[ { label:'',name ...
- BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊:分块
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2002 题意: 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆 ...
- Java企业微信开发_07_JSSDK多图上传
一.本节要点 1.1可信域名 所有的JS接口只能在企业微信应用的可信域名下调用(包括子域名),可在企业微信的管理后台“我的应用”里设置应用可信域名.这个域名必须要通过ICP备案,不然jssdk会配置失 ...
- 2018-06-07 RF test 1 :TX Power test
Test item: 1.Output power: 屏蔽网房-同轴线-频谱仪 The radio circuitry, generally referred to as the Device U ...