VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 13645|回复: 42

[转帖] VB显示网上的图片的两种方法

[复制链接]
 楼主| 发表于 2008-12-10 18:18:29 | 显示全部楼层 |阅读模式
最近,在百度空间狂溜达了些天,居然有不少收获。再和大家分享一例:
Private Declare Function OleLoadPicturePath Lib "oleaut32.dll" (ByVal szURLorPath As Long, ByVal punkCaller As Long, ByVal dwReserved As Long, ByVal clrReserved As OLE_COLOR, ByRef riid As TGUID, ByRef ppvRet As IPicture) As Long

Private Type TGUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type

'加载函数
Public Function LoadPicture(ByVal strFileName As String) As Picture
Dim IID As TGUID
With IID
.Data1 = &H7BF80980
.Data2 = &HBF32
.Data3 = &H101A
.Data4(0) = &H8B
.Data4(1) = &HBB
.Data4(2) = &H0
.Data4(3) = &HAA
.Data4(4) = &H0
.Data4(5) = &H30
.Data4(6) = &HC
.Data4(7) = &HAB
End With

On Error GoTo LocalErr

OleLoadPicturePath StrPtr(strFileName), 0&, 0&, 0&, IID, LoadPicture
Exit Function
LocalErr:
Set LoadPicture = VB.LoadPicture(strFileName)
Err.Clear
End Function

使用方法:
Set 控件名.Pictue = LoadPicture(图片网络路径)




上面这个是无缓存加载的

下面这个是下载到硬盘后加载的
去除加载部分 就是下载了

Private Sub Command1_Click()

Dim b() As Byte
Dim strURL As String
strURL = "http://himg.baidu.com/sys/portraitn/item/43a67669636d69616ffe00.jpg"

b() = Inet2.OpenURL(strURL, icByteArray)

Open "c:\csdn.jpg" For Binary Access _
Write As #1
Put #1, , b()
Close #1

Image1.Picture = LoadPicture("c:\csdn.jpg")
End Sub

来源:Baidu

本帖被以下淘专辑推荐:

 楼主| 发表于 2008-12-10 19:49:35 | 显示全部楼层
此可以用来获取网页验证码。
回复 支持 反对

使用道具 举报

发表于 2009-5-8 18:33:33 | 显示全部楼层
不是很懂...
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2009-5-8 20:58:07 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

发表于 2009-5-8 22:39:59 | 显示全部楼层
或许以下这段CODE可以让你更舒服..

Private Declare Sub CreateStreamOnHGlobal Lib "ole32.dll" (ByRef hGlobal As Any, ByVal fDeleteOnRelease As Long, ByRef ppstm As Any)
Private Declare Function OleLoadPicture Lib "oleaut32.dll" ( _
   ByVal lpStream As IUnknown, _
   ByVal lSize As Long, _
   ByVal fRunmode As Long, _
   riid As Any, _
   lpIPicture As IPicture) As Long

Public Sub DrawBytesToPicture(ByRef PictureData() As Byte, ByRef picBox As PictureBox)
     Dim IID_IPicture(3) As Long
     Dim oPicture As IPicture
     Dim nResult As Long
     Dim oStream As IUnknown
     Dim hGlobal As Long

     IID_IPicture(0) = &H7BF80980
     IID_IPicture(1) = &H101ABF32
     IID_IPicture(2) = &HAA00BB8B
     IID_IPicture(3) = &HAB0C3000

    Call CreateStreamOnHGlobal(PictureData(0), 0, oStream)

     nResult = OleLoadPicture(oStream, 0, 0, IID_IPicture(0), oPicture)
     If nResult = 0 Then
         Set picBox.Picture = oPicture
     End If

End Sub

PIC BYTE TO IPicture
回复 支持 反对

使用道具 举报

发表于 2009-5-9 09:22:17 | 显示全部楼层
楼上的和楼主的最后都是用
OleLoadPicture

网速慢的时候就知道后果了.
回复 支持 反对

使用道具 举报

发表于 2009-5-9 10:07:10 | 显示全部楼层
好贴!此技术加上图像识别技术就可以用来屏蔽 H 网站了

评分

参与人数 1威望 +1 收起 理由
ok100fenkeke + 1 但这种法不能用于验证码吧?

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2009-8-8 15:28:58 | 显示全部楼层
暴汗,第二个函数里面那个用的是哪一个控件啊

这个错误,晕,
第一个图片竟然真的出来了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2009-8-8 15:43:44 | 显示全部楼层
呵呵。纯支持。好像某段时间曾经用过了。
回复 支持 反对

使用道具 举报

发表于 2009-8-8 20:07:55 | 显示全部楼层
楼上的和楼主的最后都是用
OleLoadPicture

网速慢的时候就知道后果了.
msflexgrid 发表于 2009-5-9 09:22


与网速快慢没有关系吧~~~
显示网上的图片,使用Inet或其它方法下载下来保存在字节数组中,然后再用OleLoadPicture转成IPicture来显示,没有问题啊,这也VB实现从内存加载数据显示图片的主要方法吧~~
当然也还有其它方法来实现,那可能要借助Dll或自己写一个图片读取的代码,那恐怕太麻烦了~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-3 01:03

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表