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