procedure Hex2Png(str: string; out png: TPngObject);
var <wbr>stream: TMemoryStream;</wbr>
begin
<wbr> if not Assigned(png) then png := TPngObject.Create;</wbr>
<wbr> stream := TMemoryStream.Create;</wbr>
<wbr> stream.SetSize(Length(str) div 2);</wbr>
<wbr> HexToBin(PChar(str), stream.Memory, stream.Size);</wbr>
<wbr> png.LoadFromStream(stream);</wbr>
<wbr> stream.Free;</wbr>
end;
function Png2Hex(png: TPngObject): string;
var <wbr>stream: TMemoryStream;</wbr>
begin
<wbr> stream := TMemoryStream.Create;</wbr>
<wbr> png.SaveToStream(stream);</wbr>
<wbr> SetLength(Result, stream.Size * 2);</wbr>
<wbr> BinToHex(stream.Memory, PChar(Result), stream.Size);</wbr>
<wbr> stream.Free;</wbr>
end;
function bmp2Hex(out bmp: TBitmap):string;
var <wbr>stream: TMemoryStream;</wbr>
begin
<wbr> stream := TMemoryStream.Create;</wbr>
<wbr> bmp.SaveToStream(stream);</wbr>
<wbr> SetLength(Result, stream.Size * 2);</wbr>
<wbr> BinToHex(stream.Memory, PChar(Result), stream.Size);</wbr>
<wbr> stream.Free;</wbr>
end;
procedure Hex2bmp(str: string; out bmp: TBitmap);
var <wbr>stream: TMemoryStream;</wbr>
begin
<wbr><wbr>if not Assigned(bmp) then bmp := TBitmap.Create;</wbr></wbr>
<wbr><wbr>stream := TMemoryStream.Create;</wbr></wbr>
<wbr><wbr>stream.SetSize(Length(str) div 2);</wbr></wbr>
<wbr><wbr>HexToBin(PChar(str), stream.Memory, stream.Size);</wbr></wbr>
<wbr><wbr>bmp.LoadFromStream(stream);</wbr></wbr>
<wbr><wbr>stream.Free;</wbr></wbr>
end;
//十六进制字符串转入byte数组 1
function Hex2Byte(sRandomPwd:String):TByteArr;
var
<wbr>Buf:TByteArr;</wbr>
begin
<wbr><wbr>SetLength(Buf, Length(sRandomPwd) div 2);</wbr></wbr>
<wbr> // HexToBin(PAnsiChar(sRandomPwd), @Buf[0], Length(sRandomPwd) div 2);</wbr>
<wbr><wbr>//HexToBin(PChar(sRandomPwd), @Buf[0], Length(sRandomPwd) div 2);</wbr></wbr>
<wbr><wbr>HexToBin(PAnsiChar(sRandomPwd), @Buf[0], Length(sRandomPwd) div 2);</wbr></wbr>
<wbr><wbr>Result:=buf;</wbr></wbr>
end;
//自定义函数,转换十六进制数为十进制数
function HexToInt(Hexa: string): LongWord;
const
<wbr> ValoresHexa: array['A'..'F'] of integer = (10, 11, 12, 13, 14, 15);</wbr>
var
<wbr> nDecimal: LongWord;</wbr>
<wbr> nIndex: byte;</wbr>
begin
<wbr> nDecimal := 0;</wbr>
<wbr> Hexa := Uppercase(Hexa);</wbr>
<wbr> for nIndex := Length(Hexa) downto 1 do</wbr>
<wbr> if Hexa[nIndex] in ['0'..'9']</wbr>
<wbr> then nDecimal := nDecimal + StrToInt(Hexa[nIndex]) *</wbr>
<wbr> Trunc(Exp((Length(Hexa) - nIndex) * ln(16)))</wbr>
<wbr> else nDecimal := nDecimal + ValoresHexa[Hexa[nIndex]] *</wbr>
<wbr> Trunc(Exp((Length(Hexa) - nIndex) * ln(16)));</wbr>
<wbr> Result := nDecimal;</wbr>
end;
//十六进制字符串转入byte数组 2
function Hex2Byte2(sRandomPwd:String):TByteArr;
var
<wbr> Buf:TByteArr;</wbr>
<wbr> i:Integer;</wbr>
begin
<wbr> sRandomPwd := StringReplace(sRandomPwd,' ', '',[]);</wbr>
<wbr> if ((Length(sRandomPwd) mod 2) <> 0) <wbr><wbr>then</wbr></wbr></wbr>
<wbr> begin</wbr>
<wbr><wbr> sRandomPwd := sRandomPwd+' ';</wbr></wbr>
<wbr> end;</wbr>
<wbr> i:= Trunc(Length(sRandomPwd)/2);</wbr>
<wbr> SetLength(Buf,i);</wbr>
<wbr> for i := 0 to Length(Buf)-1 do</wbr>
<wbr> begin</wbr>
<wbr><wbr> Buf[i]:=HexToInt(Copy(sRandomPwd,i*2+1,2));</wbr></wbr>
<wbr> end;</wbr>
<wbr> Result:=Buf;</wbr>
end;
//byte数组转入十六进制字符串1
function Byte2Hex(arrByte:TByteArr):string;
var <wbr>stream: TMemoryStream;</wbr>
begin
<wbr> stream := TMemoryStream.Create;</wbr>
<wbr> stream.Write(arrByte[0],Length(arrbyte));</wbr>
<wbr> SetLength(Result, stream.Size * 2);</wbr>
<wbr> BinToHex(stream.Memory, PChar(Result), stream.Size);</wbr>
<wbr> stream.Free;</wbr>
end;
//byte数组转入十六进制字符串2
function Byte2Hex2(arrByte:TByteArr):string;
var
<wbr> i:integer;</wbr>
begin
<wbr> for i:=0 to length(arrByte)-1 do</wbr>
<wbr> begin</wbr>
<wbr><wbr> Result := Result + Copy( IntToHex(arrByte[i],16),15,2)</wbr></wbr>
<wbr> end;</wbr>
end;
procedure TForm1.btnHex2PngClick(Sender: TObject);
var <wbr>png: TPngObject;</wbr>
begin
<wbr> png := TPngObject.Create;</wbr>
<wbr> Hex2Png(Memo1.Text, png);</wbr>
<wbr> Canvas.Draw(0, 0, png);</wbr>
<wbr> png.Free;</wbr>
end;
procedure TForm1.btnPng2HexClick(Sender: TObject);
var <wbr>png: TPngObject;</wbr>
begin
<wbr> png := TPngObject.Create;</wbr>
<wbr> png.LoadFromFile('dyc.png');</wbr>
<wbr> Memo1.Text := Png2Hex(png);</wbr>
<wbr> png.Free;</wbr>
end;
procedure TForm1.btnBmp2HexClick(Sender: TObject);
var <wbr>bmp: TBitmap;</wbr>
begin
<wbr> image1.Picture.Bitmap.SaveToFile('2.bmp');</wbr>
<wbr> bmp := TBitmap.Create;</wbr>
<wbr> bmp.LoadFromFile('2.bmp');</wbr>
<wbr> Memo1.Text := bmp2Hex(bmp);</wbr>
<wbr> bmp.Free;</wbr>
end <wbr>;</wbr>
procedure TForm1.btnHex2BmpClick(Sender: TObject);
var <wbr>bmp: tbitmap;</wbr>
begin
<wbr> bmp := tbitmap.Create;</wbr>
<wbr> Memo1.Text:=StringReplace(Memo1.Text,#13,'',[]);</wbr>
<wbr> Memo1.Text:=StringReplace(Memo1.Text,#10,'',[]);</wbr>
<wbr> Hex2bmp(Memo1.Lines.GetText,bmp);</wbr>
<wbr> Canvas.Draw(1, 1, bmp);</wbr>
<wbr> bmp.Free;</wbr>
end;
procedure TForm1.btnByte2HexClick(Sender: TObject);
var
<wbr> m:TMemoryStream;</wbr>
<wbr> b:TByteArr;</wbr>
begin
<wbr> m:=TMemoryStream.Create();</wbr>
<wbr> Image1.Picture.Bitmap.SaveToStream(m);</wbr>
<wbr> m.Position:=0;</wbr>
<wbr> SetLength(b,m.size);</wbr>
<wbr> m.ReadBuffer(b[0],m.Size);</wbr>
<wbr> Memo1.Text:=Byte2Hex2(b);//或者Memo1.Text:=Byte2Hex2(b);</wbr>
end;
procedure TForm1.btnHex2ByteClick(Sender: TObject);
var
<wbr> m:TMemoryStream;</wbr>
<wbr> b:TByteArr;</wbr>
<wbr> bmp:TBitmap;</wbr>
begin
<wbr> b:=Hex2Byte2(Memo1.text);//或者Hex2Byte2(Memo1.text);</wbr>
<wbr> m:=TMemoryStream.Create;</wbr>
<wbr> m.WriteBuffer(b[0],Length(b));</wbr>
<wbr> m.Position:=0;</wbr>
<wbr> m.Seek(0,soBeginning);</wbr>
<wbr> bmp:=TBitmap.Create;</wbr>
<wbr> bmp.LoadFromStream(m);</wbr>
<wbr> Canvas.Draw(0,0,bmp);</wbr>
end;