网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
11月24日漏签0天
vb吧 关注:156,060贴子:1,166,208
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 17回复贴,共1页
<<返回vb吧
>0< 加载中...

如何将16进制字符流还原成png图片

  • 只看楼主
  • 收藏

  • 回复
  • 908119杰
  • 世界你好
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
16进制字符如下:
89504e470d0a1a0a0000000d4948445200000064000000280403000000fa56427000000030504c5445ffffffbfbfbf3f3f3f4f4f4f5f5f5f6f6f6f7f7f7f8f8f8f9f9f9fafafafcfcfcfdfdfdfefefef0f0f0f1f1f1f2f2f2f3f7cab44000001ea49444154388ded93bb4b1c5114c6cfc6e73abb6a2356ca82558a21420a1b07b6b1342882a90c362a16925421954d0261350f2b4911616d8222c220fe0123a41234e3ecc347f6bb4a4062e16092329090efae09eceaded5f4fbc19cb97339bf39f7dcef5e919a2a2bd23330955af3fe07694451eae7ed913b9708be55c9594db9a59ff1afef9e8ed8c082293f72f6a0270cd22533dd1ec36b04c6122de8974f382a9999d621c49e11b1f8b7283297e36557b652498e9a80841189b1400c8aa3b6d18bf0f879d6ce72dc0ab41b91e971062e7c656a2370b9bf6e03864466fed6ada40832afc4c2e1c6e92355200b2f069f65cbba2b571d0df85eafde876e0b4e446cae27f4b59bbd46641d29276fe7378f4506f7f9605c90941d207d3d17e522b2a47495dc36b770ac622b808e160eaed22ac1597c36aeab293cd1af5de08938ff208f4fd28848f4d4636c00b28f1d5c00670eaec8bfc6749d4bd16c04eb709b811f3694036da71f3720add922929b58d0edcfa0100d51ad152aaecf4a9d766e2ccf9a34878de90360d0a6de5a4f6726e838dd5f22d2ac77c0883426ad50659ebd8072a59e2ed24a9f6708b92acb7af30bbd6ff9d77e6dfe97b90ed0275ee442b5561679a13a27e7c59a0dd21fc9fec643e7ee4be31d2ed5bdbeb4c887fbc3b2383a7f9bfc9a6aba497f007899166350cf243b0000000049454e44ae426082
求还原后的图片,应该是一种验证码图片,更重要的是方法,最好有VB算法代码。不胜感谢!


  • sunshinebean
  • 子类化
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
还原成图片还不简单啊,你给的是个字节流
定义个byte数组,dim xx() as byte
open yourpath for binary as #1
put #1,,xx
close #1


2025-11-24 05:56:47
广告
不感兴趣
开通SVIP免广告
  • 908119杰
  • 世界你好
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
嗯,然后呢,关键是怎么变成图片啊


  • sunshinebean
  • 子类化
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
yourpath 就是你的png图片路径啊。。。


  • 908119杰
  • 世界你好
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
大哥,真有才,问题解决了。
代码整理后如下:
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
图片如下:



  • 908119杰
  • 世界你好
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
再次感谢


  • yjryym
  • 多线程
    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属性,读取、保存全都搞定了。


  • yjryym
  • 多线程
    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属性,读取、保存全都搞定了。



2025-11-24 05:50:47
广告
不感兴趣
开通SVIP免广告
  • laviewpbt
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
第一步,将这些字符转换为字节数组,第二步,将字节数组转换为stream对象,第三步,调用GDI+的相关函数将流转换为image对象,第四步,调用GDI+的绘制函数显示图像。


  • 鸿蛋
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我想说的是,在linux的qt环境下呢?嗯哼?


  • sunruisunrui
  • 小吧主
    12
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
其实,我一直想让base64字符串直接在内存中加载解码后直接放到PictureBox中,不保存为文件。加快速度。可以做到么?


  • 月球上面的人
  • 网络通信
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
怎么把图片变成16进制字符
jpg格式的可以吗


  • 乔巴ai乔巴
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
怎么搞的?


  • 乔巴ai乔巴
  • 啥也不懂
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不是转换成png格式么怎么还要图片路径?


2025-11-24 05:44:47
广告
不感兴趣
开通SVIP免广告
  • 601居士
  • 数据类型
    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


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 17回复贴,共1页
<<返回vb吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示