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

 看到有人在帖子中问,BMP和16进制相互转化的问题,其实在很早之前,偶就写过相关的东西,那就是关于向Ini文件中写入流数据的那篇帖子:
http://www.52delphi.com/dispbbs.asp?boardid=18&Id=32
大概没怎么在意到吧!
不过既然有人提出来,哪么我就专门实现一个相互转化的东西吧!

希望大家指教:

DelphiCode:
//*****************************************
 //函数: 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中的那个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值