+ -
当前位置:首页 → 问答吧 → 100分请教:截取对话框一个矩形内的图像后怎么通过socket传输?

100分请教:截取对话框一个矩形内的图像后怎么通过socket传输?

时间:2011-12-22

来源:互联网

请教:截取客户端对话框的图像后怎么通过socket传到服务端,然后通过服务端把这张图片传输到其他连接到这个服务端的机器上并显示?

VC初学者,在网上查了很多资料,依然一知半解,请教各位高手了。

附上截图的函数,通过这个函数已经可以截取出对话框的一个矩形内的图像。

在一个按钮里:
CClientDC dc(this);
CDC cMemDC;
CBitmap cBit, *pOldBP;
HBITMAP hBmp;
cMemDC.CreateCompatibleDC(&dc);
cBit.CreateCompatibleBitmap(&dc,rect.right,rect.bottom);
pOldBP = cMemDC.SelectObject(&cBit);
cMemDC.BitBlt(0,0,rect.right,rect.bottom,&dc,0,0,SRCCOPY);

cMemDC.SelectObject(pOldBP);

if (OpenClipboard()) //把兼容位图放到剪贴板
{
EmptyClipboard();
SetClipboardData(CF_BITMAP,cBit.m_hObject);
CloseClipboard();
}

服务端和客户端可以连接,通过winsocket连接的。
服务端和客户端socket差不多一样:
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,1),&wsaData)){}
ServerSocket=socket(PF_INET,SOCK_STREAM,0);
if(ServerSocket == INVALID_SOCKET)
{
return;
}
if((dwip=inet_addr(ip))==INADDR_NONE)
{
return;
}
sockStruct.sin_family=AF_INET; //使用TCP/IP协议
sockStruct.sin_port = htons(4321);
sockStruct.sin_addr.S_un.S_addr = dwip;
if(connect(ServerSocket,(LPSOCKADDR)&sockStruct,sizeof(sockStruct)) == SOCKET_ERROR)
{return;}
WSAAsyncSelect(ServerSocket,m_hWnd,WM_CLIENT_READCOLOSE,FD_READ|FD_CLOSE);

作者: desehawk   发布时间: 2011-12-22

各位高手帮忙看一下 谢谢了

作者: desehawk   发布时间: 2011-12-22

如果要通过网络传输, 最好要把截好的图先压缩一下. 比如压缩成GIF或者JPEG图像格式. 然后再传输到服务器
先将位图保存到文件里把. 可以在网上找找相关的资料.

作者: krh2001   发布时间: 2011-12-22

感谢回复,我在网上查过很多这方面的资料,因为初学不久,看的也是一知半解。不知道可不可以帮忙给做个例子 我在截取图片后应该怎么写??

作者: desehawk   发布时间: 2011-12-22

把图片的地址在send或sendto里当成数据指针直接传走就行了,接收方接收后按同样的图片格式进行处理就行了。

作者: yanyuchonglou   发布时间: 2011-12-22

VC虽然是VC,但底子还是C的,一个*就打遍半边天了。

作者: yanyuchonglou   发布时间: 2011-12-22