关于ImageList在DFM里面生成的Bitmap的16进制码怎么转成图片?

Paradise_heida 2016-01-15 07:36:56
关于ImageList在DFM里面生成的16进制码怎么转成图片?

在设计模式下给ImageList添加图片以后,在DFM里面就会生成如下的16进制码。
请问,不依赖Delphi的IDE环境,怎样将Bitmap的16进制码转成图片?
java,C#实现都可以,请大神帮助!!
100分相送!!

object ImgLst_AppIcon: TImageList
Left = 288
Top = 56
Bitmap = {
494C010102000400040010001000FFFFFFFFFF10FFFFFFFFFFFFFFFF424D3600
000000000000360000002800000040000000100000000100180000000000000C
000000000000000000000000000000000000FF0000FF0000FF0000FF0000FF00
00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF
FFFFC0C0C0C0C0C0C0C0C0C0C0C0C0C0C080C0A0406040006020006040408060
C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C2C2C2FFFFFFFFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC2C2C2FF
0000C0C0C0C0C0C0C0C0C0C0C0C0006040006040006040006040008040006040
006040006020C0C0C0C0C0C0C0C0C0C0C0C00000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C2C2C2F2F2F2F2F2F2FF0000FF00
00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000F2F2F2FFFFFFFF
0000C0C0C0C0C0C080C0A0006040006040006040006040006040006040006040
006040006040008040C0C0C0C0C0C0C0C0C00000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C2C2C2F2F2F2F2F2F2F2F2F2F2F2
F2F2F2F2F2F2F2FF0000F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2FFFFFFFF
0000A4A0A0C0C0C0006040006040006040006040006040006040006040006040
FFFFFF006020006020006040C0C0C0C0C0C00000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C2C2C2F2F2F2FF0000FF0000F2F2
F2FF0000FF0000FF0000FF0000FF0000F2F2F2FF0000FF0000F2F2F2FFFFFFFF
0000C0C0C0006040006040006040006040006040006040006040FFFFFF006040
006040006020006040006040006040C0C0C00000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C2C2C2F2F2F2F2F2F2F2F2F2FF00
00F2F2F2F2F2F2FF0000F2F2F2F2F2F2FF0000FF0000FF0000F2F2F2FFFFFFFF
0000C0C0C0006020006040006040006040006040006040006040006040006040
006040FFFFFFFFFFFF006040006040C0C0C00000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C2C2C2F2F2F2F2F2F2F2F2F2F2F2
F2FF0000F2F2F2F2F2F2F2F2F2FF0000FF0000F2F2F2F2F2F2F2F2F2FFFFFFFF
0000006040006040006040006040006040006020006040006040006040006040
FFFFFFFFFFFF00604000604000604080C0A00000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C2C2C2F2F2F2FF0000FF0000FF00
00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000F2F2F2FFFFFFFF
0000006040006020006040006040FFFFFF006040006040006040FFFFFFFFFFFF
FFFFFFFFFFFF00604000604000602040A0800000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C2C2C2F2F2F2F2F2F2F2F2F2F2F2
F2FF0000FF0000FF0000FF0000FF0000F2F2F2F2F2F2F2F2F2F2F2F2FFFFFFFF
0000006040006040006040006040FFFFFF006040006040006040FFFFFFFFFFFF
0060400060400060200060200060200060400000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C2C2C2F2F2F2F2F2F2F2F2F2F2F2
F2FF0000F2F2F2F2F2F2F2F2F2FF0000F2F2F2F2F2F2F2F2F2F2F2F2FFFFFFFF
0000006040006040006040006040FFFFFF006040006040006040FFFFFF006040
006020006020006020006040006040C0C0C00000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C2C2C2F2F2F2F2F2F2F2F2F2F2F2
F2FF0000FF0000FF0000FF0000FF0000F2F2F2F2F2F2F2F2F2F2F2F2FFFFFFFF
0000C0DCC0006040006040006040FFFFFF006040006040006040006040FFFFFF
FFFFFF006040006040006040006040C0C0C00000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C2C2C2F2F2F2F2F2F2FF0000FF00
00FF0000FF0000FF0000FF0000FF0000FF0000FF0000FF0000F2F2F2FFFFFFFF
0000C0C0C0006020006040006040FFFFFF006040006040006040006040006040
006040006040006040006040006020C0C0C00000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C2C2C2F0FAFDF2F2F2F2F2F2F2F2
F2FF0000F2F2F2F2F2F2F2F2F2FF0000F2F2F2F2F2F2F2F2F2F2F2F2FFFFFFFF
0000C0C0C0A4A0A0006040006040FFFFFF006040006040006040006040006040
006040006040006020006020C0C0C0C0C0C00000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C2C2C2F2F2F2F0FAFDF2F2F2F2F2
F2FF0000F2F2F2F2F2F2F2F2F2FF0000F2F2F2F2F2F2F2F2F2F2F2F2FFFFFFFF
0000C0C0C0C0C0C0408060006020006040006040006040006040006040006040
006040408060006040C0C0C0C0C0C0C0C0C00000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000C2C2C2F2F2F2F2F2F2F2F2F2F2F2
F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2FFFFFFFF
0000C0C0C0C0C0C0C0C0C0A4A0A0006020006040006020006040006040006040
006040006040C0C0C0C0C0C0C0C0C0C0C0C00000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000FF0000C2C2C2C2C2C2C2C2C2C2C2
C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2FF
0000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C080A0A0006040006020006040008040
C0DCC0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C00000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000424D3E000000000000003E000000
2800000040000000100000000100010000000000800000000000000000000000
000000000000000000000000FFFFFF0000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000}
end

...全文
1145 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdonghai 2017-06-30
  • 打赏
  • 举报
回复

procedure TForm1.Button1Click(Sender: TObject);
var
  sTxt:string;
  sList:TStringList;
  iSize:integer;
  buf:PChar;
  ms:TMemoryStream;
begin
  sList:=TStringList.Create;
  try
    sList.LoadFromFile('c:\2.txt');//2.txt里面的内容就是Glyph.Data = {。。。}
    sTxt:=sList.Text;
  finally
    sList.Free;
  end;

  sTxt:=StringReplace(sTxt,#13#10,'',[rfReplaceAll]);
  sTxt:=StringReplace(sTxt,' ','',[rfReplaceAll]);
  iSize:=Pos('424D',sTxt);
  sTxt:=copy(sTxt,iSize,length(sTxt));
  iSize:=length(sTxt) div 2;
  GetMem(buf,iSize);
  try
    HexToBin(PChar(sTxt),buf,iSize);

    ms:=TMemoryStream.Create;
    try
      ms.WriteBuffer(buf^,iSize);
      ms.Position:=0;
      ms.SaveToFile('c:\111.bmp');
    finally
      ms.Free;
    end;
  finally
    FreeMem(buf);
  end;
end;
currency001 2017-06-25
  • 打赏
  • 举报
回复
看了是我搞错了,这个imagelist还真不一样。。。和image不同编码
currency001 2017-06-25
  • 打赏
  • 举报
回复
再说一下,我只在image控件上测试,没在其他控件上测试,不知道是否一样
currency001 2017-06-25
  • 打赏
  • 举报
回复
一年前的帖子了, 最近分析这个,也看过这个帖子,没找到答案。 最后自己去比较,发现并不是大神说的那么复杂, 用二进制编辑器,就会发现,delphi只是在图片的十六进制序列前加了一段自己的识别编码,通常为20~30位,不同格式的图片所加长度不同,jpg,bmp,png都测试过。ico没做测试。
Paradise_heida 2016-01-30
  • 打赏
  • 举报
回复
引用 18楼不得闲 的回复:
,这是Delphi默认自动序列化处理的,如果要用代码转的话,参考TFiler对象,和Delphi基类中的DefineProperties方法中对序列化的处理的写入和读取函数。
你的分析很靠谱,根本不是简单的bmp文件格式分析就能解决的问题。谢谢。
不得闲 2016-01-26
  • 打赏
  • 举报
回复
,这是Delphi默认自动序列化处理的,如果要用代码转的话,参考TFiler对象,和Delphi基类中的DefineProperties方法中对序列化的处理的写入和读取函数。
Paradise_heida 2016-01-22
  • 打赏
  • 举报
回复
顶起!
  • 打赏
  • 举报
回复
直接读.DFM文本把位图数据转换为二进制再保存为文件,这个最简单,而且不依赖使用的语言,用C、C#、Java等等都可以,但是早期Delphi保存的DFM文件是二进制的,不是文本格式,直接读可能有些问题。 另外的方法要用Delphi、CB写小工具,建立两个TStream,实际类型可以用TFileStream、TMemoryStream,然后用ObjectBinaryToText获得文本格式的DFM,之后可以自己直接转换,或者用TStream.ReadComponent方法获得一个组件实例,从它的Components[]中查找TImageList类型的组件,TImageList.GetBitmap可以获得里面的图片,TBitmap.SaveToFile保存。
liups 2016-01-18
  • 打赏
  • 举报
回复
引用 9 楼 Paradise_heida 的回复:
[quote=引用 7 楼 keiy 的回复:] 这个很简单的,你在dehpi中新建一个form,然加添加一个TBitBtn 用view as text显示你的from 将你的 Glyph.Data = { 到 } 贴到你的TBitBtn1的end前面 然后直接view as from 就可以看到你的图形了
谢谢。 这个方法没有问题,用IDE导出的方法很简单。 我想要做的是,把Glyph.Data = {到 }之间的内容用C#代码转成图片,而不是依赖Delphi的IDE开发环境。 [/quote] 你就没有我说的,你在delphi IDE中导出bmp图片文件,然后用类似Hex Editor这样的软件打开图片,和dfm中的内容比较一下,就可以发现内容有多大差别了(不会很大的),然后根据差别的规律编程处理
Paradise_heida 2016-01-18
  • 打赏
  • 举报
回复
引用 7 楼 keiy 的回复:
这个很简单的,你在dehpi中新建一个form,然加添加一个TBitBtn 用view as text显示你的from 将你的 Glyph.Data = { 到 } 贴到你的TBitBtn1的end前面 然后直接view as from 就可以看到你的图形了
谢谢。 这个方法没有问题,用IDE导出的方法很简单。 我想要做的是,把Glyph.Data = {到 }之间的内容用C#代码转成图片,而不是依赖Delphi的IDE开发环境。
liups 2016-01-18
  • 打赏
  • 举报
回复
引用 6 楼 Paradise_heida 的回复:
[quote=引用 4 楼 lyhoo163 的回复:] 看到了,文件已发给你!
大神,您是怎么转成图片的? 不用Delphi的IDE,用代码实现是怎么做到的呢? 等待您回复! [/quote] IDE中可以导出,然后用2进制编辑器比较一下内容就明白如何处理了
柯本 2016-01-18
  • 打赏
  • 举报
回复

这个很简单的,你在dehpi中新建一个form,然加添加一个TBitBtn
用view as text显示你的from
将你的
Glyph.Data = {
到 } 贴到你的TBitBtn1的end前面
然后直接view as from 就可以看到你的图形了
Paradise_heida 2016-01-18
  • 打赏
  • 举报
回复
引用 4 楼 lyhoo163 的回复:
看到了,文件已发给你!
大神,您是怎么转成图片的? 不用Delphi的IDE,用代码实现是怎么做到的呢? 等待您回复!
liups 2016-01-18
  • 打赏
  • 举报
回复
引用 15 楼 Paradise_heida 的回复:
[quote=引用 14 楼 liups 的回复:] 楼主按我8楼说的对比过没有?对比过就会发现大多数都是一样的,你要做的就是: 1、构造BMP文件头部; 2、把DFM中相应部分复制过去 也就是说:作一个文件操作就行了
给个例子,我不知从何下手。 [/quote] 例子我没有。 你得自己进行对比,找出规律,比如你给的数据,实际上是一个imagelist中两个bmp(所以你得考虑是生成一个还是多个BMP,delphi中导出可以是一个),你就得搞清楚DFM中哪些是属于文件头(或者自定义的文件头),哪些是BMP真实的数据(位图数据),而这些位图数据其实只要简单的转换成16进制数据追加进BMP文件就行了 同时,必须研究清楚BMP文件格式,11楼给了你
Paradise_heida 2016-01-18
  • 打赏
  • 举报
回复
引用 14 楼 liups 的回复:
楼主按我8楼说的对比过没有?对比过就会发现大多数都是一样的,你要做的就是: 1、构造BMP文件头部; 2、把DFM中相应部分复制过去 也就是说:作一个文件操作就行了
给个例子,我不知从何下手。
liups 2016-01-18
  • 打赏
  • 举报
回复
楼主按我8楼说的对比过没有?对比过就会发现大多数都是一样的,你要做的就是: 1、构造BMP文件头部; 2、把DFM中相应部分复制过去 也就是说:作一个文件操作就行了
Paradise_heida 2016-01-18
  • 打赏
  • 举报
回复
引用 12 楼 DelphiGuy 的回复:
直接读.DFM文本把位图数据转换为二进制再保存为文件,这个最简单,而且不依赖使用的语言,用C、C#、Java等等都可以,但是早期Delphi保存的DFM文件是二进制的,不是文本格式,直接读可能有些问题。 另外的方法要用Delphi、CB写小工具,建立两个TStream,实际类型可以用TFileStream、TMemoryStream,然后用ObjectBinaryToText获得文本格式的DFM,之后可以自己直接转换,或者用TStream.ReadComponent方法获得一个组件实例,从它的Components[]中查找TImageList类型的组件,TImageList.GetBitmap可以获得里面的图片,TBitmap.SaveToFile保存。
Delphi6以后,DFM可以保存成文本格式,所以我才能拿到那些16进制的码。 现在问题是,我用尽了各种C#中的方法,也不能把那些码转成BMP图片。 问题的关键就在这里,用C#或者JAVA,把那些16进制码转成BMP图片。
lyhoo163 2016-01-17
  • 打赏
  • 举报
回复
看到了,文件已发给你!
lyhoo163 2016-01-17
  • 打赏
  • 举报
回复
贴子仅在手机上显示,电脑上没有。
加载更多回复(3)

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧