打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
delphi 图像 16进制 转换

delphi 图像 16进制 转换

时间:2011-6-2来源:yang 作者: peng点击: 31次

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
保存BMP图像的JAVA类
引用 CreateDIBSection
将一幅图像转换为灰度图
图像旋转算法与实现
Delphi中关于MOVE和CopyMemory的用法区别
FileStreami.Write 写字符串 注意sizeof(Char),delphi2010 widechar
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服