如何将16进制字符流还原成png图片
vb吧
全部回复
仅看楼主
level 3
908119杰 楼主
16进制字符如下:
89504e470d0a1a0a0000000d4948445200000064000000280403000000fa56427000000030504c5445ffffffbfbfbf3f3f3f4f4f4f5f5f5f6f6f6f7f7f7f8f8f8f9f9f9fafafafcfcfcfdfdfdfefefef0f0f0f1f1f1f2f2f2f3f7cab44000001ea49444154388ded93bb4b1c5114c6cfc6e73abb6a2356ca82558a21420a1b07b6b1342882a90c362a16925421954d0261350f2b4911616d8222c220fe0123a41234e3ecc347f6bb4a4062e16092329090efae09eceaded5f4fbc19cb97339bf39f7dcef5e919a2a2bd23330955af3fe07694451eae7ed913b9708be55c9594db9a59ff1afef9e8ed8c082293f72f6a0270cd22533dd1ec36b04c6122de8974f382a9999d621c49e11b1f8b7283297e36557b652498e9a80841189b1400c8aa3b6d18bf0f879d6ce72dc0ab41b91e971062e7c656a2370b9bf6e03864466fed6ada40832afc4c2e1c6e92355200b2f069f65cbba2b571d0df85eafde876e0b4e446cae27f4b59bbd46641d29276fe7378f4506f7f9605c90941d207d3d17e522b2a47495dc36b770ac622b808e160eaed22ac1597c36aeab293cd1af5de08938ff208f4fd28848f4d4636c00b28f1d5c00670eaec8bfc6749d4bd16c04eb709b811f3694036da71f3720add922929b58d0edcfa0100d51ad152aaecf4a9d766e2ccf9a34878de90360d0a6de5a4f6726e838dd5f22d2ac77c0883426ad50659ebd8072a59e2ed24a9f6708b92acb7af30bbd6ff9d77e6dfe97b90ed0275ee442b5561679a13a27e7c59a0dd21fc9fec643e7ee4be31d2ed5bdbeb4c887fbc3b2383a7f9bfc9a6aba497f007899166350cf243b0000000049454e44ae426082
求还原后的图片,应该是一种验证码图片,更重要的是方法,最好有VB算法代码。不胜感谢![Love]
2011年08月02日 14点08分 1
level 13
还原成图片还不简单啊,你给的是个字节流
定义个byte数组,dim xx() as byte
open yourpath for binary as #1
put #1,,xx
close #1
2011年08月02日 14点08分 2
level 3
908119杰 楼主
嗯,然后呢,关键是怎么变成图片啊
2011年08月02日 15点08分 3
level 13
yourpath 就是你的png图片路径啊。。。
2011年08月02日 15点08分 4
level 3
908119杰 楼主
大哥,真有才,问题解决了。
代码整理后如下:
Private Sub Command1_Click()
Dim HEXSTR As String
Dim A() As Byte
HEXSTR = Text1
ReDim A(Len(HEXSTR) / 2)
For I = 0 To Len(HEXSTR) Step 2
A(I / 2) = Val("&H" & Mid(HEXSTR, I + 1, 2))
Next
Open "c:\123.PNG" For Binary As #1
Put #1, , A()
Close #1
End Sub
图片如下:

2011年08月02日 15点08分 6
level 3
908119杰 楼主
再次感谢
2011年08月02日 15点08分 7
level 14
Property Get BinaryEdit$(File)
Dim I%, Data() As Byte, Str$
If TypeName(File) = "String" Then
I =FileFree
Open File For Binary As #I
ReDim Data(LOF(I) - 1)
Get #I, , Data
Close #I
Else
ReDim Data(LOF(File)
Get #File, , Data
End If
For I = 0 To UBound(Data)
Str = Str & IIf(Data(I) < &H10, "0", "") & Hex$(Data(I))
Next
BinaryEdit = Str
End Property
Property Let BinaryEdit(File, Str&)
Dim I%, Data() As Byte
ReDim Data(Len(Str) / 2 - 1)
For I = 0 To UBound(Data)
Data(I) = CByte("&H" & Mid(Str, I * 2 + 1, 2)
Next
If TypeName(File) = "String" Then
I = FileFree
Open File For Binary As #I
Put #I, , Data
Close #I
Else
Put #File, , Data
End If
End Property
Private Sub Command1_Click()
'读取
Text1 = BinaryEdit(".\File1.png") '方式1
Open "File2.png" For Binary As #1
Text2 = BinaryEdit(1) '方式2
Close #1
End Sub
Private Sub Command2_Click()
'保存
BinaryEdit(".\File1.png") = Text '方式1
Open ".\File2.png" For Binary As #2
BinaryEdit(2) = Text2
Close #2 '方式2
End Sub
用BinaryEdit属性,读取、保存全都搞定了。
2011年08月02日 17点08分 9
level 14
九楼:
行10,列21:缺少括号!
Property Get BinaryEdit$(File)
Dim I%, Data() As Byte, Str$
If TypeName(File) = "String" Then
I =FileFree
Open File For Binary As #I
ReDim Data(LOF(I) - 1)
Get #I, , Data
Close #I
Else
ReDim Data(LOF(File) - 1)
Get #File, , Data
End If
For I = 0 To UBound(Data)
Str = Str & IIf(Data(I) < &H10, "0", "") & Hex$(Data(I))
Next
BinaryEdit = Str
End Property
Property Let BinaryEdit(File, Str&)
Dim I%, Data() As Byte
ReDim Data(Len(Str) / 2 - 1)
For I = 0 To UBound(Data)
Data(I) = CByte("&H" & Mid(Str, I * 2 + 1, 2)
Next
If TypeName(File) = "String" Then
I = FileFree
Open File For Binary As #I
Put #I, , Data
Close #I
Else
Put #File, , Data
End If
End Property
Private Sub Command1_Click()
'读取
Text1 = BinaryEdit(".\File1.png") '方式1
Open ".\File2.png" For Binary As #1
Text2 = BinaryEdit(1) '方式2
Close #1
End Sub
Private Sub Command2_Click()
'保存
BinaryEdit(".\File1.png") = Text '方式1
Open ".\File2.png" For Binary As #2
BinaryEdit(2) = Text2
Close #2 '方式2
End Sub
用BinaryEdit属性,读取、保存全都搞定了。

2011年08月02日 18点08分 10
level 1
第一步,将这些字符转换为字节数组,第二步,将字节数组转换为stream对象,第三步,调用GDI+的相关函数将流转换为image对象,第四步,调用GDI+的绘制函数显示图像。
2011年08月03日 02点08分 11
level 1
我想说的是,在linux的qt环境下呢?嗯哼?
2014年07月03日 08点07分 12
吧务
level 12
其实,我一直想让base64字符串直接在内存中加载解码后直接放到PictureBox中,不保存为文件。加快速度。可以做到么?
2014年07月04日 00点07分 13
level 11
怎么把图片变成16进制字符
jpg格式的可以吗
2014年07月22日 10点07分 15
level 1
怎么搞的?
2015年11月29日 08点11分 16
level 1
不是转换成png格式么怎么还要图片路径?
2015年11月29日 08点11分 17
小黑屋
2015年11月29日 12点11分
level 4
VB的图片框不能直接显示png格式的图片,如果你这些数据是JPG图片或者GIF图片的,那么通过下面的函数可以直接显示在VB图片框。
Option Explicit
Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hGlobal As Long, ByVal fDeleteOnRelease As Long, ppstm As Any) As Long
Private Declare Function OleLoadPicture Lib "olepro32" (pStream As Any, ByVal lSize As Long, ByVal fRunmode As Long, riid As Any, ppvObj As Any) As Long
Private Declare Function CLSIDFromString Lib "ole32" (ByVal lpsz As Any, pclsid As Any) As Long
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal uFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal length As Long)
Private Function GetPictureFromByteStream(picData() As Byte) As IPicture '将数组合成为图像
On Error GoTo 100
Dim bCount As Long, hMem As Long, lpMem As Long
Dim IID_IPicture(15)
Dim IStream As stdole.IUnknown
bCount = UBound(picData) + 1 ' 计算数组大小
hMem = GlobalAlloc(&H2 Or &H40, bCount) '按数组大小分配内存空间
If hMem Then '若分配内存成功
lpMem = GlobalLock(hMem) '锁定内存, 返回起始字节的指针
If lpMem Then
CopyMemory ByVal lpMem, picData(0), bCount
Call GlobalUnlock(hMem)
If CreateStreamOnHGlobal(hMem, 1, IStream) = 0 Then
If CLSIDFromString(StrPtr("{7BF80980-BF32-101A-8BBB-00AA00300CAB}"), IID_IPicture(0)) = 0 Then
Call OleLoadPicture(ByVal ObjPtr(IStream), bCount, 0, IID_IPicture(0), GetPictureFromByteStream)
End If
End If
End If
End If
GlobalFree hMem
Exit Function
100
End Function
2022年01月04日 05点01分 19
赞秋水兄!
2022年01月04日 06点01分
1