图像到16进制相互转换的几个函数

 

//*****************************************
// 函数: BmpToHex
// 作者: 不得闲
// QQ:  75492895
// email: [email protected]
// 功能:通过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: [email protected]
// 功能:通过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

你可能感兴趣的:(图像到16进制相互转换的几个函数)