能不能让Picture读取变量中的图形数据?

sss2002 2005-05-10 07:48:03
如果先把图片从文件中读取出来,放在变量中,再让 Picture 显示变量中的图像,这样是否可行?如果可以,哪位高手愿意给出代码阿。送 100 分
...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
homezj 2005-05-11
  • 打赏
  • 举报
回复
原来楼主是这种要求,两次表述都不清楚,幸好被人猜出来了(不知猜得对不对?)

Byte数组转Picture对象很常用,以上rainstormmaster(暴风雨 v2.0) 说了引用类型库一法,也就是其中Array2Picture函数要做的事,其本质上就是调用olepro32.dll中的OleLoadPicture函数,当然不用类型库,完全可自已声明API也可达到目的。
MmMVP 2005-05-11
  • 打赏
  • 举报
回复
http://www.aivisoft.net/zyl910/ZylDIBop.zip
用代码里面的类,很简单
rainstormmaster 2005-05-10
  • 打赏
  • 举报
回复
'利用IPersistStream接口和IStream接口实现
'可以从http://www.mvps.org/emorcillo/vb6/tlb/tl_ole.zip下载文件,下载后解压,并注册、引用olelib.tlb

Option Explicit

Const GMEM_MOVEABLE = &H2
Const GMEM_ZEROINIT = &H40
Const GHND = (GMEM_MOVEABLE Or GMEM_ZEROINIT)
Private Declare Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
Private Declare Function GlobalSize Lib "kernel32" (ByVal hMem 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

Const PictureID = &H746C&

Private Type PictureHeader
Magic As Long
Size As Long
End Type


Public Sub Picture2Array(ByVal oObj As StdPicture, aBytes() As Byte)
Dim oIPS As IPersistStream
Dim oStream As IStream
Dim hGlobal As Long
Dim lPtr As Long
Dim lSize As Long
Dim Hdr As PictureHeader
Set oIPS = oObj
Set oStream = CreateStreamOnHGlobal(0, True)
oIPS.Save oStream, True
hGlobal = GetHGlobalFromStream(oStream)
lSize = GlobalSize(hGlobal)
lPtr = GlobalLock(hGlobal)
If lPtr Then
lSize = lSize - Len(Hdr)
ReDim aBytes(0 To lSize - 1)
MoveMemory aBytes(0), ByVal lPtr + Len(Hdr), lSize
End If
GlobalUnlock hGlobal
Set oStream = Nothing

End Sub


Public Function Array2Picture(aBytes() As Byte) As StdPicture
Dim oIPS As IPersistStream
Dim oStream As IStream
Dim hGlobal As Long
Dim lPtr As Long
Dim lSize As Long
Dim Hdr As PictureHeader
Set Array2Picture = New StdPicture
Set oIPS = Array2Picture
lSize = UBound(aBytes) - LBound(aBytes) + 1
hGlobal = GlobalAlloc(GHND, lSize + Len(Hdr))
If hGlobal Then
lPtr = GlobalLock(hGlobal)
Hdr.Magic = PictureID
Hdr.Size = lSize
MoveMemory ByVal lPtr, Hdr, Len(Hdr)
MoveMemory ByVal lPtr + Len(Hdr), aBytes(0), lSize
GlobalUnlock hGlobal
Set oStream = CreateStreamOnHGlobal(hGlobal, True)
oIPS.Load oStream
Set oStream = Nothing
End If
End Function


Private Sub Command1_Click()
'下面假设你已经将文件读入到了byte型数组buff中,代码由你完成
Set Picture2.Picture = Array2Picture(buff)
End Sub
sss2002 2005-05-10
  • 打赏
  • 举报
回复
谢谢楼上2位,我的意思是加入变量 picA 已经存放了2进制图形数据,能不能写到硬盘成文件,而直接显示在Picture中?
homezj 2005-05-10
  • 打赏
  • 举报
回复
Dim picA As StdPicture
set picA = LoadPicture("c:\winnt\windows.bmp")
Mars.CN 2005-05-10
  • 打赏
  • 举报
回复
你可以声明一个PictureBox型变量用来方图片
picA as picturebox
picA=loadpicture("c:\winnt\windows.bmp")

picture1.picture
tmran 2005-05-10
  • 打赏
  • 举报
回复
先占个顶楼,我试试看哈。

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧