// SendImg.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <winsock2.h>
#include "ijl.h"
#include "SendImg.h"
BOOL EncodeJPGFileFromDIB(
LPCSTR lpszPathName,
IplImage* bmih);
BOOL DecodeFromJPEGBuffer(
BYTE* lpJpgBuffer,
DWORD dwJpgBufferSize,
BYTE** lppRgbBuffer,
DWORD* lpdwWidth,
DWORD* lpdwHeight,
DWORD* lpdwNumberOfChannels);
int recv_reqframe(SOCKET s)
{
PACK_DATA_HEADER tmph;
//char a;
//recv(s, &a, 1, 0);
int rel = recv(s, (char*)&tmph, sizeof(PACK_DATA_HEADER), 0);
if (rel <= 0)
return rel;
if (tmph.type[0]=='r' && tmph.type[1]=='q')
return rel;
return -1;
}
int send_string(SOCKET s, char* str, int size, int *perr)
{
int pack_size = size + sizeof(PACK_DATA_HEADER);
if (pack_size > PACK_LIMIT_SIZE) {
return 1;
}
char* pack = new char[pack_size];
PACK_DATA_HEADER* p_pack_header = reinterpret_cast<PACK_DATA_HEADER*>(pack);
char* d_str = pack+sizeof(PACK_DATA_HEADER);
// Prepare pack header
p_pack_header->type[0] = 'r';
p_pack_header->type[1] = 'q';
p_pack_header->num = 0;
p_pack_header->count = 1;
p_pack_header->data_size = size;
memcpy(d_str, str, size);
// Send Log String
int rel;
if ((rel = send(s, pack, pack_size, 0)) == SOCKET_ERROR) {
*perr = WSAGetLastError();
if (WSAEWOULDBLOCK == *perr) {
ATLTRACE("怪不得没有日志!\n");
}
}
delete []pack;
return rel;
}
int send_image_header(SOCKET s, int width, int height, int channels)
{
char* pack = new char[sizeof(PACK_DATA_HEADER)+sizeof(NET_IMAGE_HEADER)];
PACK_DATA_HEADER* p_pack_header = reinterpret_cast<PACK_DATA_HEADER*>(pack);
NET_IMAGE_HEADER* p_nimh;
p_nimh = reinterpret_cast<NET_IMAGE_HEADER*>(pack+sizeof(PACK_DATA_HEADER));
// Prepare pack header
p_pack_header->type[0] = 'i';
p_pack_header->type[1] = 'h';
p_pack_header->num = 0;
p_pack_header->count = 1;
p_pack_header->data_size = sizeof(NET_IMAGE_HEADER);
p_nimh->width = width;
p_nimh->height = height;
p_nimh->channels = channels;
// Send Image Header
send(s, pack, sizeof(PACK_DATA_HEADER)+sizeof(NET_IMAGE_HEADER), 0);
delete []pack;
return 0;
}
int send_image_data(SOCKET s, uchar *data, int size, int *err_code, int *num)
{
char* pack = new char[PACK_LIMIT_SIZE];
int head_size = sizeof(PACK_DATA_HEADER);
PACK_DATA_HEADER* p_pack_header;
p_pack_header = reinterpret_cast<PACK_DATA_HEADER*>(pack);
char* buf = pack + head_size;
// Prepare pack header
int data_size = PACK_LIMIT_SIZE - head_size;
p_pack_header->type[0] = 'i';
p_pack_header->type[1] = 'm';
p_pack_header->num = 0;
p_pack_header->count = (size+data_size-1)/data_size;
//a little patch for client identify type
if (SOCKET_ERROR == send(s, "im", 2, 0)) {
ATLTRACE("靠,不是吧,你也调用失败,5555555!!\n");
*err_code = WSAGetLastError();
*num = -1;
delete []pack;
return SOCKET_ERROR;
}
int q_code = 0, send_size = 0;
while (p_pack_header->num < p_pack_header->count) {
p_pack_header->data_size = (size < data_size) ? size : data_size;
memcpy(buf, data, p_pack_header->data_size);
if (SOCKET_ERROR == send(s, pack, p_pack_header->data_size+head_size, 0)) {
q_code = WSAGetLastError();
if (WSAEWOULDBLOCK == q_code) {
//ATLTRACE("靠,send_image_data居然调用失败!!\n");
*num = p_pack_header->num;
}
break;
}
data += data_size;
send_size += p_pack_header->data_size;
size -= data_size;
p_pack_header->num++;
}
delete[] pack;
*err_code = q_code;
if (q_code)
return SOCKET_ERROR;
return send_size;
}
int send_image_data_n(SOCKET s, uchar *data, int size, int *err_code, int *num)
{
char* pack = new char[PACK_LIMIT_SIZE];
int head_size = sizeof(PACK_DATA_HEADER);
PACK_DATA_HEADER* p_pack_header;
p_pack_header = reinterpret_cast<PACK_DATA_HEADER*>(pack);
char* buf = pack + head_size;
// Prepare pack header
int data_size = PACK_LIMIT_SIZE - head_size;
p_pack_header->type[0] = 'i';
p_pack_header->type[1] = 'm';
p_pack_header->num = 0;
p_pack_header->count = (size+data_size-1)/data_size;
if (*num >= p_pack_header->count) {
*err_code = 1;
return SOCKET_ERROR;
}
//a little patch for client identify type
if (*num == -1) {
if (SOCKET_ERROR == send(s, "im", 2, 0)) {
//ATLTRACE("晕,你怎么还是调用失败!!\n");
*err_code = WSAGetLastError();
delete []pack;
return SOCKET_ERROR;
}
}
int q_code = 0, send_size = 0;
while (p_pack_header->num < p_pack_header->count) {
p_pack_header->data_size = (size < data_size) ? size : data_size;
if (p_pack_header->num >= *num) {
memcpy(buf, data, p_pack_header->data_size);
if (SOCKET_ERROR == send(s, pack, p_pack_header->data_size+head_size, 0)) {
q_code = WSAGetLastError();
if (WSAEWOULDBLOCK == q_code) {
//ATLTRACE("send_image_data_n 居然调用失败!!\n");
*num = p_pack_header->num;
}
break;
}
}
data += data_size;
send_size += p_pack_header->data_size;
size -= data_size;
p_pack_header->num++;
}
delete[] pack;
*err_code = q_code;
if (q_code)
return SOCKET_ERROR;
return send_size;
}
//int send_iplimage_data(SOCKET s, IplImage* pim)
//{
// uchar* data;
// int step;
// CvSize size;
//
// cvGetRawData(pim, (uchar**)&data, &step, &size);
//// step /= sizeof(data[0]);
//
// uchar *jpgdata;
// DWORD jpg_size;
// EncodeToJPEGBuffer(reinterpret_cast<BYTE*>(data), size.width,
// size.height, &jpgdata, &jpg_size, 75);
//
// send_image_data(s, jpgdata, jpg_size);
//
// delete[] jpgdata;
// return 0;
//}
//----------------------------------------------------------
// -- Encode Windows DIB to JPEG buffer.
//----------------------------------------------------------
BOOL EncodeToJPEGBuffer(
BYTE* lpRgbBuffer,
DWORD dwWidth,
DWORD dwHeight,
BYTE** lppJpgBuffer,
DWORD* lpdwJpgBufferSize,
int quality)
{
BOOL bres;
IJLERR jerr;
DWORD dwRgbBufferSize;
BYTE* lpTemp;
// Allocate the IJL JPEG_CORE_PROPERTIES structure.
JPEG_CORE_PROPERTIES jcprops;
bres = TRUE;
__try
{
// Initialize the Intel(R) JPEG Library.
jerr = ijlInit(&jcprops);
if(IJL_OK != jerr)
{
bres = FALSE;
__leave;
}
dwRgbBufferSize = dwWidth * dwHeight * 3;
lpTemp = new BYTE [dwRgbBufferSize];
if(NULL == lpTemp)
{
bres = FALSE;
__leave;
}
// Set up information to write from the pixel buffer.
jcprops.DIBWidth = dwWidth;
jcprops.DIBHeight = dwHeight; // Implies a bottom-up DIB.
jcprops.DIBBytes = lpRgbBuffer;
jcprops.DIBPadBytes = 4*((dwWidth*3+3)/4)-dwWidth*3;
jcprops.DIBChannels = 3;
jcprops.DIBColor = IJL_RGB;
jcprops.JPGWidth = dwWidth;
jcprops.JPGHeight = dwHeight;
jcprops.JPGFile = NULL;
jcprops.JPGBytes = lpTemp;
jcprops.JPGSizeBytes = dwRgbBufferSize;
jcprops.JPGCh
没有合适的资源?快使用搜索试试~ 我知道了~
vc.rar_opencv camera_vc 摄像头_指示灯 _路由
共77个文件
svn-base:38个
h:14个
cpp:12个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 133 浏览量
2022-09-20
16:34:38
上传
评论
收藏 325KB RAR 举报
温馨提示
通过摄像头监视路由器指示灯的状况 将摄像头捕捉的路由器图像信息实时传输到客户端,识别指示灯位置,并即时判断指示灯状态.其中使用了directshow对摄像头进行捕捉,图像处理部分采用了intel的opencv库,网络模块采用wi
资源推荐
资源详情
资源评论
收起资源包目录
vc.rar (77个子文件)
CamServer
AboutDlg.h 954B
stdafx.cpp 531B
data.cpp 3KB
CamServer.sln 907B
AboutDlg.cpp 508B
CapCamera.cpp 1KB
res
CamServer.exe.manifest 592B
Toolbar.bmp 840B
CamServer.ico 1KB
.svn
prop-base
logo.bmp.svn-base 53B
CamServer.ico.svn-base 53B
Toolbar.bmp.svn-base 53B
props
tmp
prop-base
props
text-base
text-base
CamServer.exe.manifest.svn-base 592B
logo.bmp.svn-base 140KB
CamServer.ico.svn-base 1KB
Toolbar.bmp.svn-base 840B
entries 726B
format 2B
logo.bmp 140KB
CamServer.rc 11KB
stdafx.h 747B
CamServer.vcproj 6KB
ARFrameGrabber.cpp 12KB
common.h 442B
ARFrameGrabber.h 3KB
detect.cpp 6KB
detect.h 1KB
CamServer.h 96B
ijl.h 53KB
MainFrm.cpp 14KB
resource.h 1KB
ijl15l.lib 474KB
MainFrm.h 5KB
OptionDlg.cpp 369B
CamServer.cpp 2KB
picture.cpp 2KB
SendImg.h 1KB
SendImg.cpp 14KB
OptionDlg.h 824B
MyServer.h 2KB
CapCamera.h 842B
CamServerView.cpp 5KB
.svn
prop-base
ijl15l.lib.svn-base 53B
props
tmp
prop-base
props
text-base
text-base
CamServerView.cpp.svn-base 5KB
CapCamera.h.svn-base 842B
CamServer.sln.svn-base 907B
MyServer.h.svn-base 2KB
SendImg.cpp.svn-base 14KB
detect.cpp.svn-base 6KB
ARFrameGrabber.h.svn-base 3KB
CapCamera.cpp.svn-base 1KB
AboutDlg.cpp.svn-base 508B
common.h.svn-base 442B
ijl15l.lib.svn-base 474KB
MainFrm.h.svn-base 5KB
AboutDlg.h.svn-base 954B
CamServerView.h.svn-base 1KB
MainFrm.cpp.svn-base 14KB
detect.h.svn-base 1KB
stdafx.h.svn-base 747B
picture.cpp.svn-base 2KB
SendImg.h.svn-base 1KB
data.cpp.svn-base 3KB
CamServer.vcproj.svn-base 6KB
ijl.h.svn-base 53KB
CamServer.rc.svn-base 11KB
OptionDlg.h.svn-base 824B
OptionDlg.cpp.svn-base 369B
ARFrameGrabber.cpp.svn-base 12KB
CamServer.h.svn-base 96B
CamServer.cpp.svn-base 2KB
stdafx.cpp.svn-base 531B
resource.h.svn-base 1KB
entries 4KB
format 2B
CamServerView.h 1KB
www.pudn.com.txt 218B
共 77 条
- 1
资源评论
JonSco
- 粉丝: 73
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功