您现在的位置:首页 >> 图形媒体 >> 图形媒体 >> 内容

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

时间:2011-9-3 15:03:48 点击:

  核心提示://*****************************************//函数: BmpToHex//作者: 不得闲//QQ: 75492895//email: appleak46@y...
//*****************************************
//函数: 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中的那个

作者:网络 来源:转载
共有评论 1相关评论
发表我的评论
  • 大名:
  • 内容:
本类推荐
  • 没有
本类固顶
  • 没有
  • 盒子文章(www.2ccc.com) © 2017 版权所有 All Rights Reserved.
  • 沪ICP备05001939号