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

来源:互联网 发布:python写入txt文件 编辑:程序博客网 时间:2024/06/01 09:20

 看到有人在帖子中问,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中的那个

原创粉丝点击