我将视屏采集卡中的图像显示在PictureBox中,然后用
Picture1.AutoReDraw = True
VB.SavePicture Picture1.Image , "E:\pic.jpg"
结果保存的图片都是灰屏的,请问这个怎么解决?怎么将视屏保存为图片?保存后将此图片用Winsock发送,又出现的问题是:
1、如何用winsock一次传送大小为500K左右的图片呢?
2、怎么判断winsock连接的机器是远程还是本地的呢?
谢谢各位了:)
Picture1.AutoReDraw = True
VB.SavePicture Picture1.Image , "E:\pic.jpg"
结果保存的图片都是灰屏的,请问这个怎么解决?怎么将视屏保存为图片?保存后将此图片用Winsock发送,又出现的问题是:
1、如何用winsock一次传送大小为500K左右的图片呢?
2、怎么判断winsock连接的机器是远程还是本地的呢?
谢谢各位了:)
Picture1.AutoReDraw = True
VB.SavePicture Picture1.Picture , "E:\pic.jpg"//1、如何用winsock一次传送大小为500K左右的图片呢?
发送端分拆,接收端组合。用字节数组最方便和高效。//2、怎么判断winsock连接的机器是远程还是本地的呢?
判断连接的IP地址和计算机名称是否和本地一致。
>>以上代码好像没有问题,不过,你保存成jpg文件没有意义,因为SavePicture函数好像只支持BMP格式的图片文件保存。
Winsock问题:
>>1。你可以把保存的文件读出来,发送。不过,呵呵哈,这样效率低呢,最好直接在内存操作,不要保存到硬盘去。还有,最后先把图片转下格式,BMP格式太大了,发送会很慢的。另:好像我记得Winsock一次发送的数据量有限制?1kb还是?分批发出吧。
>>2。我。。不知道怎么用Winsock判断。。那个东东功能不强。你可以用ws2_32.dll里的Socket系列函数。
建议不要用 SavePicture来进行保存。
那怎么在内存里面操作呢?能写个例子吗?
VB我想,那几个GDI函数可以用吧
CreateBitmap()可以创建个位图,但是忘记怎么把Vb的数据结构转换成void的指针了,不好意思,能力有限。:)
Private Sub Form_Load()
Video_Handle = CreateCaptureWindow(PicCapture.hwnd)
End SubPrivate Sub Command1_Click()
Dim x As StdPicture
Set x = CapturePicture(Video_Handle)
SavePicture x, "c:\a.bmp"
End SubPrivate Sub Form_Unload(Cancel As Integer)
Disconnect Video_Handle
End Sub'************模块************
Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal nID As Long) As LongPrivate Const WS_CHILD = &H40000000
Private Const WS_VISIBLE = &H10000000
Private Const WM_USER = &H400
Private Const WM_CAP_START = &H400
Private Const WM_CAP_EDIT_COPY = (WM_CAP_START + 30)
Private Const WM_CAP_DRIVER_CONNECT = (WM_CAP_START + 10)
Private Const WM_CAP_SET_PREVIEWRATE = (WM_CAP_START + 52)
Private Const WM_CAP_SET_OVERLAY = (WM_CAP_START + 51)
Private Const WM_CAP_SET_PREVIEW = (WM_CAP_START + 50)
Private Const WM_CAP_DRIVER_DISCONNECT = (WM_CAP_START + 11)Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Preview_Handle As LongPublic Function CreateCaptureWindow(hWndParent As Long, Optional x As Long = 0, Optional y As Long = 0, Optional nWidth As Long = 320, Optional nHeight As Long = 240, Optional nCameraID As Long = 0) As Long Preview_Handle = capCreateCaptureWindow("Video", WS_CHILD + WS_VISIBLE, x, y, nWidth, nHeight, hWndParent, 1) SendMessage Preview_Handle, WM_CAP_DRIVER_CONNECT, nCameraID, 0
SendMessage Preview_Handle, WM_CAP_SET_PREVIEWRATE, 30, 0
SendMessage Preview_Handle, WM_CAP_SET_OVERLAY, 1, 0
SendMessage Preview_Handle, WM_CAP_SET_PREVIEW, 1, 0 CreateCaptureWindow = Preview_Handle
End FunctionPublic Function CapturePicture(nCaptureHandle As Long) As StdPicture
Clipboard.Clear
SendMessage nCaptureHandle, WM_CAP_EDIT_COPY, 0, 0
Set CapturePicture = Clipboard.GetData
End FunctionPublic Sub Disconnect(nCaptureHandle As Long, Optional nCameraID = 0)
SendMessage nCaptureHandle, WM_CAP_DRIVER_DISCONNECT, nCameraID, 0
End Sub