我目前是使用了SavePicture将图片保存到文件,然后再发送文件,接收方将内容保存到文件后再LoadPicture,如果能直接取得图片内容,或剪贴板里的图片内容,到对方再直接送入图片或送入剪贴板,就省了文件存取过程。
图象复制到剪贴板时,其实只复制了一个索引,并没有真正复制图片内容,所以Clipboard.getdata得到的只是索引,没有图片内容。
图象复制到剪贴板时,其实只复制了一个索引,并没有真正复制图片内容,所以Clipboard.getdata得到的只是索引,没有图片内容。
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End TypePrivate Declare Function CreateStreamOnHGlobal Lib "ole32.dll" (ByRef hGlobal As Any, ByVal fDeleteOnResume As Long, ByRef ppstr As Any) As Long
Private Declare Function OleLoadPicture Lib "olepro32.dll" (ByVal lpStream As IUnknown, ByVal lSize As Long, ByVal fRunMode As Long, ByRef riid As GUID, ByRef lplpObj As Any) As Long
Private Declare Function CLSIDFromString Lib "ole32.dll" (ByVal lpsz As Long, ByRef pclsid As GUID) As Long' HKEY_CLASSES_ROOT\Interface\{7BF80980-BF32-101A-8BBB-00AA00300CAB} = IPicture
Private Const SIPICTURE As String = "{7BF80980-BF32-101A-8BBB-00AA00300CAB}"' convert a byte array to IPicturePublic Function PictureFromRes(ByRef b() As Byte) As IPicture
On Error GoTo errorhandler
Dim istrm As IUnknown
Dim tGuid As GUID
If Not CreateStreamOnHGlobal(b(LBound(b)), False, istrm) Then
CLSIDFromString StrPtr(SIPICTURE), tGuid
OleLoadPicture istrm, UBound(b) - LBound(b) + 1, False, tGuid, PictureFromRes
End If
Set istrm = Nothing
Exit Function
errorhandler:
Debug.Print "Could not convert to IPicture!"
End Function
以前把数据库中BLOB图片取出来都要先变成文件,确实有点烦。
Public Ptream As New ADODB.Stream
Ptream.Type = adTypeBinary
Ptream.Open
If Len(FilesName) <> 0 Then
Ptream.LoadFromFile FilesName
Rs.Fields("picture").Value = Ptream.Read
Else
Rs.Fields("picture").Value = ""
End If
取:
FilesName = App.Path & "\picfile.chg"
Ptream.Type = adTypeBinary
Ptream.Open
Ptream.Write Rs.Fields("picture").Value
If Len(FilesName) <> 0 Then
Ptream.SaveToFile FilesName, adSaveCreateOverWrite
Image1.Picture = LoadPicture(FilesName)
Call Frm_MDI.PicRef_Wwg
Else
Image1.Picture = Nothing
End If
Ptream.Close
http://www.vbaccelerator.com/home/VB/Utilities/Bitmap_Extractor/VB6_Bitmap_Extractor_zip_cAlphaDibSection_cls.asp
http://community.csdn.net/Expert/topic/3209/3209104.xml?temp=.2357904
GetBitmapBits【操作系统】
Win9X:Yes
WinNT:Yes【声明】
GetBitmapBits Lib "gdi32" Alias "GetBitmapBits" (ByVal hBitmap As Long, ByVal dwCount As Long, lpBits As Any) As Long【说明】 将来自位图的二进制位复制到一个缓冲区 【返回值】 Long,如执行成功,返回位图中的字节数量;零表示失败。会设置GetLastError 【其它】 虽然这个函数能正常工作,但强烈建议使用与设备无关的位图(GetDIBits)【参数表】
hBitmap -------- Long,位图的句柄 dwCount -------- Long,欲复制的字节数。如设为零,表示取得位图中的字节数 lpBits --------- Any,指向容纳位图位的一个缓冲区的指针。注意事先将缓冲区至少初始化成dwCount个字节 函数功能:该函数将指定位图的位拷贝到缓冲区里。 函数原型:LONG GetBitmapBits(HBITMAP hbmp, LONG cbBuffer, LPVOID lpvBits); 参数: hbmp:指向感兴趣的位图的句柄。 cbBuffer:指定要从位图拷贝到缓冲区的字节数。 lpvBits:指向接收位图位数据的缓冲区指针。这些位是按字节类型存储在数组中的。 返回值:如果该函数执行成功,那么返回值就是拷贝到缓冲区的字节数;如果该函数执行失败,那么返回值为0。 Windows NT:若想获得更多错误信息,请调用GetLastError函数。