博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图像到16进制相互转换的几个函数
阅读量:7034 次
发布时间:2019-06-28

本文共 1992 字,大约阅读时间需要 6 分钟。

 

//*****************************************
//
函数: BmpToHex
//
作者: 不得闲
//
QQ: 
75492895
//
email: appleak46@yahoo.com.cn
//
功能:通过Bitmap句柄将位图转换为16进制
//
请大家尊重作者劳动成果,转载请保留作者信息,谢谢
//*****************************************
function
 BmpToHex(BmpHandle: HBITMAP): 
string
;
var
  ds: TDIBSection;
  BmpFileHeader:  TBitmapFileHeader;
  NumberOfColors,BitCount: Integer;
  Bm: tagBITMAP;
  Bytes: integer;
begin
  Bytes :
=
 GetObject(BmpHandle,SizeOf(ds),@ds);  
//
获得有关DIBSECTION结构中的点阵图资讯
  
if
 Bytes 
=
 
0
 
then
 
raise
 Exception.Create(
'
无效的位图
'
);
  Bytes :
=
 GetObject(BmpHandle,SizeOf(bm),@Bm);  
//
获得tagBITMAP结构
  
if
 Bytes 
=
 
0
 
then
 
raise
 Exception.Create(
'
无效的位图
'
);
  NumberOfColors :
=
 ds.dsBmih.biClrUsed;     
//
获得调色板中实际使用的颜色数
  BitCount :
=
 ds.dsBmih.biBitCount;    
//
位图位数
  
if
 (NumberOfColors 
=
 
0
and
 (BitCount 
<=
 
8
then
     NumberOfColors :
=
 
1
 
shl
 BitCount;
  With BmpFileHeader 
do
  
begin
    bfType :
=
 $4D42;  
//
 
'
BM
'
位图标记
    bfReserved1 :
=
 
0
;
    bfReserved2 :
=
 
0
;
    bfOffBits :
=
 SizeOf(TBitmapFileHeader)       
+
                 SizeOf(TBitmapInfoHeader)       
+
                 NumberOfColors
*
SizeOf(TRGBQuad);   
//
获得信息头大小
    bfSize :
=
 bfOffBits 
+
 ds.dsBmih.biSizeImage;  
//
获得文件大小
  
end
;
  Result :
=
 PointToHex(@BmpFileHeader,SizeOf(BmpFileHeader)) 
+
 PointToHex(@ds.dsBmih,SizeOf(ds.dsBmih)) 
+
 PointToHex(bm.bmBits,ds.dsBmih.biSizeImage);
end
;
//*****************************************
//
函数: BmpHexToBmp
//
作者: 不得闲
//
QQ: 
75492895
//
email: appleak46@yahoo.com.cn
//
功能:通过BmpToHex的16进制串转化成位图数据
//
请大家尊重作者劳动成果,转载请保留作者信息,谢谢
//*****************************************
procedure
 BmpHexToBmp(
const
 HexStr: 
string
;bmp: TBitmap);
var
  Stream: TMemoryStream;
begin
  
if
 bmp 
=
  
nil
 
then
    
raise
 Exception.Create(
'
位图不能为空
'
);
  Stream :
=
 TMemoryStream.Create;
  Stream.SetSize(Length(HexStr)
div
 
2
);
  Classes.HexToBin(Pchar(HexStr),Pchar(Integer(Stream.Memory)),Stream.Size);
  Stream.Seek(
0
,soFromBeginning);
  bmp.LoadFromStream(Stream);
  Stream.Free;
end
;

 

 

请看以前的文章PointToHex

HexToBin,如果偶写的那个不行(可能需要修改一下),请换成Classes中的那个

转载于:https://www.cnblogs.com/rogee/archive/2010/09/15/1827323.html

你可能感兴趣的文章
C# 中datagridview控件的使用
查看>>
gson error
查看>>
安装Nginx
查看>>
Shell中 &>/dev/null和 >/dev/null 2>&1
查看>>
Eclipse Memory Analyzer(Java内存泄漏分析工具)
查看>>
监理归档文件保管期限
查看>>
U盘或移动硬盘Device is busy 解决
查看>>
SSH登陆会出现 -bash-4.2$ 的问题
查看>>
ubuntu18.4默认防火墙UFW安装配置
查看>>
Discourse 中文安装指南
查看>>
解决VMware9中安装完win8后安装tools会黑屏问题
查看>>
智能DNS解析:网通、电信
查看>>
简单有效的多标准中文分词
查看>>
Ubuntu下安装Memcached
查看>>
1_标签frameset.txt
查看>>
WinAPI: SetWindowExtEx、SetViewportExtEx
查看>>
springCloud(16):使用Zuul构建微服务网关-容错回退与高可用
查看>>
WinAPI 字符及字符串函数(4): CharUpperBuff - 把缓冲区中指定数目的字符转大写
查看>>
CentOS配置yum源报错:[Errno -1] Metadata file does not match checksum
查看>>
学 Win32 汇编[18]: 关于压栈(PUSH)与出栈(POP) 之二
查看>>