是实现客户端与服务端实现图片传输并显示
**注:**测试图片宽为 481, 高为 640
char buf[481*640*3];
while(1)
{
memset(buf, 0, sizeof(buf));
int total = 0;
while(total < 481*640*3)
{
long len = recv(connfd, buf, 481*640*3, 0);
total = total + len;
}
cout << "接收长度为: " << total << endl;
break;
}
Mat img(640, 481, CV_8UC3, buf);
imshow("sss", img);
waitKey(0);
Mat img = imread("/img/1.jpg");
int imgSize = img.cols*img.rows*img.channels();
cout << imgSize << endl;
char pos[imgSize];
memcpy(pos, img.data, sizeof(pos));
long sizelen = send(sockfd, pos, imgSize, 0);
我理解的是 recv 函数返回的是 copy 完成的字节,send 发送数据过大时需要多次 recv.
因此我在 recv 加了个循环保证接收到的字节数等于发送的字节数.但是当我把接收到的数据 Imshow 时出现了图片错误的情况,大概是图片只展示了一部分并且出现了图片复制这种情况.
因为接触 C++不久,网上也查不到相关资料,因此写贴咨询一下,还请各位大佬不吝赐教,谢谢.
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.