test2eyesDlg.cpp
上传用户:lwxipeng
上传日期:2022-05-16
资源大小:15982k
文件大小:25k
源码类别:

视频捕捉/采集

开发平台:

Visual C++

  1. // test2eyesDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "test2eyes.h"
  5. #include "test2eyesDlg.h"
  6. //---OpenCV的库文件-----------
  7. #pragma comment (lib,"cv200d")
  8. #pragma comment (lib,"highgui200d")
  9. #pragma comment (lib, "cxcore200d")
  10. //---gsl的库文件-----------
  11. #pragma comment (lib, "libgsl.a")
  12. #include "sift.h"
  13. #include "imgfeatures.h"
  14. #include "kdtree.h"
  15. #include "utils.h"
  16. #include "xform.h"
  17. #include <Windows.h>
  18. #include <cv.h>
  19. #include <cxcore.h>
  20. #include <highgui.h>
  21. #include <stdio.h>
  22. #include <math.h>
  23. // #include   <mmsystem.h>   
  24. // #pragma   comment(lib,   "WINMM.LIB") 
  25. #ifdef _DEBUG
  26. #define new DEBUG_NEW
  27. #endif
  28. // Ctest2eyesDlg 对话框
  29. #define MYTIMER 3
  30. Ctest2eyesDlg::Ctest2eyesDlg(CWnd* pParent /*=NULL*/)
  31. : CDialog(Ctest2eyesDlg::IDD, pParent)
  32. {
  33. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  34. }
  35. Ctest2eyesDlg::~Ctest2eyesDlg()
  36. {
  37. m_ThreadExit = TRUE;
  38. //------释放内存存储器-----------
  39. cvReleaseImage( &stacked );
  40. cvReleaseImage( &img1 );
  41. cvReleaseImage( &img2 );
  42. kdtree_release( kd_root );
  43. free( feat1 );
  44. free( feat2 );
  45. }
  46. void Ctest2eyesDlg::DoDataExchange(CDataExchange* pDX)
  47. {
  48. CDialog::DoDataExchange(pDX);
  49. DDX_Control(pDX, IDC_SLIDER1, m_slider);
  50. }
  51. BEGIN_MESSAGE_MAP(Ctest2eyesDlg, CDialog)
  52. ON_WM_PAINT()
  53. ON_WM_QUERYDRAGICON()
  54. //}}AFX_MSG_MAP
  55. ON_BN_CLICKED(IDOK, &Ctest2eyesDlg::OnBnClickedOk)
  56. ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER1, &Ctest2eyesDlg::OnNMReleasedcaptureSlider1)
  57. ON_WM_TIMER()
  58. ON_WM_CTLCOLOR()
  59. ON_BN_CLICKED(IDCANCEL, &Ctest2eyesDlg::OnBnClickedCancel)
  60. END_MESSAGE_MAP()
  61. // Ctest2eyesDlg 消息处理程序
  62. BOOL Ctest2eyesDlg::OnInitDialog()
  63. {
  64. CDialog::OnInitDialog();
  65. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  66. //  执行此操作
  67. SetIcon(m_hIcon, TRUE); // 设置大图标
  68. SetIcon(m_hIcon, FALSE); // 设置小图标
  69. CString strsj;
  70. m_sj = (CEdit*)this->GetDlgItem( IDC_EDIT_SJ );
  71. strsj= _T("70");
  72. m_sj->SetWindowText( strsj);
  73. CString strjj;
  74. m_jj = (CEdit*)this->GetDlgItem( IDC_EDIT_JJ );
  75. strjj= _T("370");
  76. m_jj->SetWindowText( strjj);
  77. CString strmin;
  78. m_min = (CEdit*)this->GetDlgItem( IDC_EDIT_MIN );
  79. strmin= _T("20");
  80. m_min->SetWindowText( strmin);
  81. CString strmax;
  82. m_max = (CEdit*)this->GetDlgItem( IDC_EDIT_MAX );
  83. strmax= _T("1000");
  84. m_max->SetWindowText( strmax);
  85. m_slider.SetRange(1,30,TRUE);
  86. m_slider.SetPos(3);
  87. CString m_LIP,m_RIP;
  88. m_LIP= _T("192.168.10.46");
  89. m_RIP= _T("192.168.10.47");
  90. m_RightReceived = FALSE;
  91. m_LeftReceived= FALSE;
  92. m_processing= FALSE;
  93. m_ThreadExit = TRUE;
  94. m_lip = (CEdit*)this->GetDlgItem( IDC_EDIT_L );
  95. m_rip = (CEdit*)this->GetDlgItem( IDC_EDIT_R );
  96. m_lip->SetWindowText( m_LIP);
  97. m_rip->SetWindowText( m_RIP);
  98. m_pos = 5;
  99. stacked = NULL;
  100. memset(m_ju,0,sizeof(struct des)*1000);
  101. memset(m_out_ju,0,sizeof(struct des)*1000);
  102. m_ju_k = 0;
  103. m_yu_zhi_enable =FALSE;
  104. // TODO: 在此添加额外的初始化代码
  105. m_BMPDisplayBrush.DeleteObject();
  106. m_BMPDisplayBrush.CreateSolidBrush(RGB(255,255,255));
  107. m_BMP_OK.LoadBitmap(IDB_BITMAP_OK);
  108. m_BMP_NG.LoadBitmap(IDB_BITMAP_NG);
  109. m_BMP_WAIT.LoadBitmap(IDB_BITMAP_WAIT);
  110. GetDlgItem(IDC_STATIC_ICON)->MoveWindow(10,10,50,50);
  111. GetDlgItem(IDC_STATIC_ICON)->GetWindowRect(m_BMPDisplayRect);
  112. ScreenToClient(m_BMPDisplayRect);
  113. ShowICON(0);
  114. return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
  115. }
  116. void Ctest2eyesDlg::OnPaint()
  117. {
  118. if (IsIconic())
  119. {
  120. CPaintDC dc(this); // 用于绘制的设备上下文
  121. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  122. // 使图标在工作矩形中居中
  123. int cxIcon = GetSystemMetrics(SM_CXICON);
  124. int cyIcon = GetSystemMetrics(SM_CYICON);
  125. CRect rect;
  126. GetClientRect(&rect);
  127. int x = (rect.Width() - cxIcon + 1) / 2;
  128. int y = (rect.Height() - cyIcon + 1) / 2;
  129. // 绘制图标
  130. dc.DrawIcon(x, y, m_hIcon);
  131. }
  132. else
  133. {
  134. CDialog::OnPaint();
  135. }
  136. }
  137. void Ctest2eyesDlg::ShowICON(int nicon)
  138. {
  139. if (nicon == 0)
  140. {
  141. m_BMPDisplayBrush.DeleteObject();
  142. m_BMPDisplayBrush.CreatePatternBrush(&m_BMP_WAIT);
  143. InvalidateRect(m_BMPDisplayRect,FALSE);
  144. if (nicon == 1)
  145. {
  146. m_BMPDisplayBrush.DeleteObject();
  147. m_BMPDisplayBrush.CreatePatternBrush(&m_BMP_OK);
  148. InvalidateRect(m_BMPDisplayRect,FALSE);
  149. }
  150. if (nicon == 2)
  151. {
  152. m_BMPDisplayBrush.DeleteObject();
  153. m_BMPDisplayBrush.CreatePatternBrush(&m_BMP_NG);
  154. InvalidateRect(m_BMPDisplayRect,FALSE);
  155. }
  156. }
  157. //当用户拖动最小化窗口时系统调用此函数取得光标显示。
  158. //
  159. HCURSOR Ctest2eyesDlg::OnQueryDragIcon()
  160. {
  161. return static_cast<HCURSOR>(m_hIcon);
  162. }
  163. void Ctest2eyesDlg::OnBnClickedOk()
  164. {
  165. m_ThreadExit = FALSE;
  166. AfxBeginThread( ThreadL , this );
  167. AfxBeginThread( ThreadR , this );
  168. SetTimer( MYTIMER , 500 , NULL );
  169. }
  170. void Ctest2eyesDlg::test_SIFT()
  171. {
  172. //  if (m_RightReceived == FALSE ||  m_LeftReceived == FALSE )
  173. //  {
  174. //  return ;
  175. //  }
  176. m_processing = TRUE;
  177. TRACE(_T("Processing One...rn"));
  178. ShowICON(0);
  179. int l=0;
  180. if(l<5)
  181. l=4;
  182. char   img1_file[] = "D:\project\pic\001.jpg";
  183. char   img2_file[] = "D:\project\pic\002.jpg" ;
  184. double imgzoom_scale=1.0;
  185. struct feature* feat;
  186. struct feature** nbrs;
  187. CvPoint pt1 ={0,0}, pt2={0,0};
  188. double d0, d1;
  189. int n1, n2, k, i;
  190. static int m = 0;
  191. //cvReleaseImage(&img1);
  192. img1 = cvLoadImage( img1_file, 1 );
  193. if( ! img1 )
  194. {
  195. //fatal_error( "unable to load image from %s", img1_file );
  196. CString strerr;
  197. strerr.Format(_T("unable to load image from img1.rn"));
  198. TRACE(strerr);
  199. }
  200. //cvReleaseImage(&img2);
  201. img2 = cvLoadImage( img2_file, 1 );
  202. if( ! img2 )
  203. {
  204. CString strerr;
  205. strerr.Format(_T("unable to load image from img2.rn"));
  206. TRACE(strerr);
  207. }
  208. stacked = stack_imgs( img1, img2 );
  209. n1 = sift_features( img1, &feat1 );
  210. n2 = sift_features( img2, &feat2 );
  211. kd_root = kdtree_build( feat2, n2 );
  212. m_ju_k = 0;
  213. for( i = 0; i < n1; i++ )
  214. {
  215. feat = feat1 + i;
  216. k = kdtree_bbf_knn( kd_root, feat, 2, &nbrs, KDTREE_BBF_MAX_NN_CHKS );
  217. if( k == 2 )
  218. {
  219. d0 = descr_dist_sq( feat, nbrs[0] );
  220. d1 = descr_dist_sq( feat, nbrs[1] );
  221. if( d0 < d1 * NN_SQ_DIST_RATIO_THR )
  222. {
  223. pt1 = cvPoint( cvRound( feat->x ), cvRound( feat->y ) );
  224. pt2 = cvPoint( cvRound( nbrs[0]->x ), cvRound( nbrs[0]->y ) );
  225. //---------存储单个点坐标到点序列中----------
  226. pt2.x += img1->width + 20;
  227. m_ju[m_ju_k].y = abs(pt1.y - pt2.y);
  228. m_ju[m_ju_k].lx = pt1.x;
  229. m_ju[m_ju_k].ly = pt1.y;
  230. m_ju[m_ju_k].rx = pt2.x;
  231. m_ju[m_ju_k].ry = pt2.y;
  232. m_ju[m_ju_k].x = abs(pt2.x - pt1.x - img1->width - 20);
  233. m_ju[m_ju_k].s = m_ju[m_ju_k].x;
  234. CString str1;
  235. m_sj->GetWindowText(str1);
  236. ULONG sj;
  237. sj = _ttoi(str1.GetBuffer());;
  238. CString str2;
  239. m_jj->GetWindowText(str2);
  240. ULONG jj;
  241. jj = _ttoi(str2.GetBuffer());
  242. if ( jj != 0 && sj != 0)
  243. {
  244. int z;
  245. z=jj*sj;
  246. if (m_ju[m_ju_k].s!=0)
  247. {
  248. m_ju[m_ju_k].L_des = z/m_ju[m_ju_k].s;
  249. }
  250. m_ju_k++;
  251. }
  252. }
  253. }
  254. free( nbrs );
  255. }
  256. m_yu_zhi_enable =TRUE;
  257. Yu_Zhi();
  258. TRACE(_T("Processing One OK.rn"));
  259. return ;
  260. }
  261. void Ctest2eyesDlg::Yu_Zhi()
  262. {
  263. TRACE(_T("Processing Two.rn"));
  264. if (m_yu_zhi_enable == TRUE)
  265. {
  266. BOOL findsth = FALSE;
  267. for (int dota = 0;dota < m_ju_k; dota++)
  268. {
  269. CString str_min,str_max;
  270. m_max->GetWindowText(str_max);
  271. m_min->GetWindowText(str_min);
  272. ULONG  mmax,mmin;
  273. mmax = _ttoi(str_max.GetBuffer());
  274. mmin = _ttoi(str_min.GetBuffer());
  275. if ((m_ju[dota].L_des>mmin) && (m_ju[dota].L_des<mmax) && (m_ju[dota].y<7))
  276. {
  277. findsth =TRUE;
  278. // PlaySound(__T("D:\dfa.wma"),NULL,SND_ASYNC|SND_LOOP);
  279. TRACE(_T("imag1 cood:%3d,%3drn"),m_ju[dota].lx,m_ju[dota].ly);
  280. TRACE(_T("imag2 cood:%3d,%3drn"),m_ju[dota].rx,m_ju[dota].ry);
  281. TRACE(_T("destence:%5drn"),m_ju[dota].L_des);
  282. cvRectangle(stacked,cvPoint(m_ju[dota].lx - m_ju[dota].s/m_pos,m_ju[dota].ly - m_ju[dota].s/m_pos),cvPoint(m_ju[dota].lx + m_ju[dota].s/m_pos,m_ju[dota].ly + m_ju[dota].s/m_pos),CV_RGB(255,0,0),1,8,0);    
  283. cvRectangle(stacked,cvPoint(m_ju[dota].rx - m_ju[dota].s/m_pos,m_ju[dota].ry - m_ju[dota].s/m_pos),cvPoint(m_ju[dota].rx + m_ju[dota].s/m_pos,m_ju[dota].ry + m_ju[dota].s/m_pos),CV_RGB(255,0,0),1,8,0);
  284. dota++;
  285. }
  286. }
  287. if (findsth)
  288. {
  289. ShowICON(2);
  290. }
  291. else
  292. {
  293. ShowICON(1);
  294. }
  295. cvDestroyAllWindows;
  296. cvNamedWindow( "img_feature", 1 );
  297. cvShowImage( "img_feature", stacked );
  298. cvReleaseImage( &stacked );
  299. cvReleaseImage( &img1 );
  300. cvReleaseImage( &img2 );
  301. kdtree_release( kd_root );
  302. free( feat1 );
  303. free( feat2 );
  304. m_RightReceived = FALSE;
  305. m_LeftReceived = FALSE;
  306. m_processing = FALSE;
  307. TRACE(_T("Processing Two OK.rn"));
  308. }
  309. m_yu_zhi_enable = FALSE;
  310. }
  311. void Ctest2eyesDlg::OnNMReleasedcaptureSlider1(NMHDR *pNMHDR, LRESULT *pResult)
  312. {
  313. m_pos=m_slider.GetPos();
  314. Yu_Zhi();
  315. *pResult = 0;
  316. }
  317. UINT ThreadR( LPVOID g)
  318. {
  319. WSADATA wsa;
  320. /* initialize socket  */
  321. WSAStartup(MAKEWORD(1,1),&wsa);
  322. Ctest2eyesDlg * thisClass = (Ctest2eyesDlg*)g;
  323. SOCKET m_serverSocket;
  324. /* create socket  */
  325. m_serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  326. SOCKADDR_IN  serverAddr;
  327. ZeroMemory((char *)&serverAddr,sizeof(serverAddr));
  328. serverAddr.sin_family = AF_INET;
  329. serverAddr.sin_port = htons(5565);
  330. serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  331. /* bind socket  */
  332. bind(m_serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr));
  333. struct sockaddr_in daddr; 
  334. memset((void *)&daddr,0,sizeof(daddr)); 
  335. daddr.sin_family=AF_INET; 
  336. daddr.sin_port=htons(80);
  337. CString str1 ;
  338. thisClass->m_rip->GetWindowText(str1);
  339. char rip[40];
  340. wcstombs(rip , str1.GetBuffer() , 39 );
  341. daddr.sin_addr.s_addr=inet_addr(rip); 
  342. int error = connect(m_serverSocket,(struct sockaddr *)&daddr,sizeof(daddr)); 
  343. const char * buf = "GET /MJPEG.CGI HTTP/1.0rnrn";
  344. fd_set fdRead; /* Read concourse define. */
  345. int ret; /* Return value. */
  346. TIMEVAL aTime; /* Event wait time define. */
  347. char recvBuf[RECV_BUF_SIZE];
  348. int allcount = 0;
  349. aTime.tv_sec = 1;
  350. aTime.tv_usec = 0;
  351. int recvLen;
  352. int f_recv = F_RECEIVE_NOWORKR;
  353. send( m_serverSocket,buf,100,0);
  354. TRACE(__T("Right Socket ok.rn"));
  355. while (thisClass->m_ThreadExit == FALSE)
  356. {
  357. if (thisClass->m_RightReceived == TRUE)
  358. {
  359. TRACE(__T("Right Wait for Processing.rn"));
  360. Sleep(10);
  361. continue;
  362. }
  363. TRACE(__T("Right Receiving.rn"));
  364. /* Set empty to the fdRead Event. */
  365. FD_ZERO(&fdRead);
  366. /* Set read event to the client socket. */
  367. FD_SET(m_serverSocket,&fdRead);
  368. /* To judge whether there is any read event. */
  369. ret = select(0,&fdRead,NULL,NULL,&aTime);
  370. if (ret > 0)
  371. {
  372. if (FD_ISSET(m_serverSocket,&fdRead))
  373. {
  374. /* read event happen */
  375. recvLen = 0;
  376. /* recieve data */
  377. memset( recvBuf , 0 , RECV_BUF_SIZE );
  378. recvLen = recv( m_serverSocket , recvBuf , RECV_BUF_SIZE , 0 );
  379. if( recvLen <= 0 )
  380. {
  381. TRACE( _T( "Right TCP recive nothing.rn" ) );
  382. continue;
  383. }
  384. if( F_RECEIVE_NOWORKR == f_recv )
  385. {
  386. int tempcount;
  387. for( tempcount = 0 ; tempcount < recvLen - 1 ; tempcount++ )
  388. {
  389. if( ( recvBuf[tempcount] == (char)0xFF ) && ( recvBuf[tempcount + 1] == (char)0xD8 ) )
  390. {
  391. f_recv = F_RECEIVE_BEGINR;
  392. break;
  393. }                        
  394. }
  395. if(  F_RECEIVE_BEGINR == f_recv )
  396. {
  397. f_recv = F_RECEIVE_R;
  398. thisClass->recvBytePointerR = 0;
  399. memcpy( thisClass->recvImageBufR , recvBuf + tempcount , recvLen - tempcount );
  400. thisClass->recvBytePointerR = recvLen - tempcount;
  401. }
  402. }
  403. else if( F_RECEIVE_R == f_recv )
  404. {
  405. int tempcount;
  406. for( tempcount = 0 ; tempcount < recvLen  ; tempcount++ )
  407. {
  408. if( ( recvBuf[tempcount - 2] == (char)0xFF ) && ( recvBuf[tempcount - 1] == (char)0xD9 ) )
  409. {
  410. f_recv = F_RECEIVE_OVERR;
  411. break;
  412. }
  413. }
  414. if( F_RECEIVE_R == f_recv )   /* 未接收完一个文件 */
  415. {
  416. memcpy( thisClass->recvImageBufR + thisClass->recvBytePointerR , recvBuf , recvLen );
  417. thisClass->recvBytePointerR += recvLen;
  418. }
  419. else if( F_RECEIVE_OVERR == f_recv ) /* 接收完一个文件 */
  420. {           
  421. memcpy( thisClass->recvImageBufR + thisClass->recvBytePointerR , recvBuf , tempcount );
  422. thisClass->recvBytePointerR += tempcount;
  423. CString strL;
  424. strL.Format( __T("D:\project\pic\001.jpg") , 1 );
  425. TRACE(__T("Right Received file.rn"));
  426. CFile ka;
  427. if( ka.Open( strL , CFile::modeCreate | CFile::modeReadWrite ) == TRUE )
  428. {
  429. TRACE(__T("Right Writting file.rn"));
  430. ka.SeekToBegin();
  431. ka.Write( thisClass->recvImageBufR , thisClass->recvBytePointerR );
  432. ka.Close();
  433. thisClass->m_RightReceived = TRUE;
  434. }
  435. TRACE(__T("Right Received done.rn"));
  436. if( thisClass->f_MutexImageBufR == MUTEX_NONUSE )
  437. {
  438. thisClass->f_MutexImageBufR = MUTEX_USE;
  439. memcpy(thisClass->imageBufR.buf , thisClass->recvImageBufR , thisClass->recvBytePointerR );
  440. thisClass->imageBufR.size = thisClass->recvBytePointerR;
  441. thisClass->f_MutexImageBufR = MUTEX_NONUSE;
  442. }
  443. f_recv = F_RECEIVE_NOWORKR;
  444. for( ; tempcount < recvLen - 1 ; tempcount++ )
  445. {
  446. if( ( recvBuf[tempcount] == (char)0xFF ) && ( recvBuf[tempcount + 1] == (char)0xD8 ) )
  447. {
  448. f_recv = F_RECEIVE_BEGINR;
  449. break;
  450. }                        
  451. }
  452. if(  F_RECEIVE_BEGINR == f_recv )
  453. {
  454. f_recv = F_RECEIVE_R;
  455. thisClass->recvBytePointerR = 0;
  456. memcpy( thisClass->recvImageBufR , recvBuf + tempcount , recvLen - tempcount );
  457. thisClass->recvBytePointerR = recvLen - tempcount;
  458. }
  459. }
  460. }
  461. }
  462. }
  463. }
  464. closesocket(m_serverSocket);
  465. WSACleanup();
  466. return TRUE;
  467. }
  468. UINT ThreadL( LPVOID g)
  469. {
  470. WSADATA wsa;
  471. /* initialize socket  */
  472. WSAStartup(MAKEWORD(1,1),&wsa);
  473. Ctest2eyesDlg * thisClass = (Ctest2eyesDlg*)g;
  474. SOCKET m_serverSocket;
  475. /* create socket  */
  476. m_serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  477. SOCKADDR_IN  serverAddr;
  478. ZeroMemory((char *)&serverAddr,sizeof(serverAddr));
  479. serverAddr.sin_family = AF_INET;
  480. serverAddr.sin_port = htons(5565);
  481. serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  482. /* bind socket  */
  483. bind(m_serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr));
  484. struct sockaddr_in daddr; 
  485. memset((void *)&daddr,0,sizeof(daddr)); 
  486. daddr.sin_family=AF_INET; 
  487. daddr.sin_port=htons(80);
  488. CString str1 ;
  489. thisClass->m_lip->GetWindowText(str1);
  490. char lip[40];
  491. wcstombs(lip , str1.GetBuffer() , 39 );
  492. daddr.sin_addr.s_addr=inet_addr(lip); 
  493. int error = connect(m_serverSocket,(struct sockaddr *)&daddr,sizeof(daddr)); 
  494. const char * buf = "GET /MJPEG.CGI HTTP/1.0rnrn";
  495. fd_set fdRead; /* Read concourse define. */
  496. int ret; /* Return value. */
  497. TIMEVAL aTime; /* Event wait time define. */
  498. char recvBuf[RECV_BUF_SIZE];
  499. int allcount = 0;
  500. aTime.tv_sec = 1;
  501. aTime.tv_usec = 0;
  502. int recvLen;
  503. int f_recv = F_RECEIVE_NOWORKL;
  504. send( m_serverSocket,buf,100,0);
  505. TRACE(__T("Left Socket ok.rn"));
  506. while (thisClass->m_ThreadExit == FALSE)
  507. {
  508. if (thisClass->m_LeftReceived == TRUE)
  509. {
  510. TRACE(__T("Left Wait for Processing.rn"));
  511. Sleep(10);
  512. continue;
  513. }
  514. TRACE(__T("Left Receiving.rn"));
  515. /* Set empty to the fdRead Event. */
  516. FD_ZERO(&fdRead);
  517. /* Set read event to the client socket. */
  518. FD_SET(m_serverSocket,&fdRead);
  519. /* To judge whether there is any read event. */
  520. ret = select(0,&fdRead,NULL,NULL,&aTime);
  521. if (ret > 0)
  522. {
  523. if (FD_ISSET(m_serverSocket,&fdRead))
  524. {
  525. /* read event happen */
  526. recvLen = 0;
  527. /* recieve data */
  528. memset( recvBuf , 0 , RECV_BUF_SIZE );
  529. recvLen = recv( m_serverSocket , recvBuf , RECV_BUF_SIZE , 0 );
  530. if( recvLen <= 0 )
  531. {
  532. TRACE( _T( "Left TCP recive nothing.rn" ) );
  533. continue;
  534. }
  535. if( F_RECEIVE_NOWORKL == f_recv )
  536. {
  537. int tempcount;
  538. for( tempcount = 0 ; tempcount < recvLen - 1 ; tempcount++ )
  539. {
  540. if( ( recvBuf[tempcount] == (char)0xFF ) && ( recvBuf[tempcount + 1] == (char)0xD8 ) )
  541. {
  542. f_recv = F_RECEIVE_BEGINL;
  543. break;
  544. }                        
  545. }
  546. if(  F_RECEIVE_BEGINL == f_recv )
  547. {
  548. f_recv = F_RECEIVEL;
  549. thisClass->recvBytePointerL = 0;
  550. memcpy( thisClass->recvImageBufL , recvBuf + tempcount , recvLen - tempcount );
  551. thisClass->recvBytePointerL = recvLen - tempcount;
  552. }
  553. }
  554. else if( F_RECEIVEL == f_recv )
  555. {
  556. int tempcount;
  557. for( tempcount = 0 ; tempcount < recvLen  ; tempcount++ )
  558. {
  559. if( ( recvBuf[tempcount - 2] == (char)0xFF ) && ( recvBuf[tempcount - 1] == (char)0xD9 ) )
  560. {
  561. f_recv = F_RECEIVE_OVER_L;
  562. break;
  563. }
  564. }
  565. if( F_RECEIVEL == f_recv )   /* 未接收完一个文件 */
  566. {
  567. memcpy( thisClass->recvImageBufL + thisClass->recvBytePointerL , recvBuf , recvLen );
  568. thisClass->recvBytePointerL += recvLen;
  569. }
  570. else if( F_RECEIVE_OVER_L == f_recv ) /* 接收完一个文件 */
  571. {           
  572. memcpy( thisClass->recvImageBufL + thisClass->recvBytePointerL , recvBuf , tempcount );
  573. thisClass->recvBytePointerL += tempcount;
  574. CString strL;
  575. strL.Format( __T("D:\project\pic\002.jpg") , 1 );
  576. TRACE(__T("Left Received file.rn"));
  577. CFile ka;
  578. if( ka.Open( strL , CFile::modeCreate | CFile::modeReadWrite ) == TRUE )
  579. {
  580. TRACE(__T("Left Writting file.rn"));
  581. ka.SeekToBegin();
  582. ka.Write( thisClass->recvImageBufL , thisClass->recvBytePointerL );
  583. ka.Close();
  584. thisClass->m_LeftReceived = TRUE;
  585. }
  586. TRACE(__T("Left Received done.rn"));
  587. if( thisClass->f_MutexImageBufL == MUTEX_NONUSE )
  588. {
  589. thisClass->f_MutexImageBufL = MUTEX_USE;
  590. memcpy(thisClass->imageBufL.buf , thisClass->recvImageBufL , thisClass->recvBytePointerL );
  591. thisClass->imageBufL.size = thisClass->recvBytePointerL;
  592. thisClass->f_MutexImageBufL = MUTEX_NONUSE;
  593. }
  594. f_recv = F_RECEIVE_NOWORKL;
  595. for( ; tempcount < recvLen - 1 ; tempcount++ )
  596. {
  597. if( ( recvBuf[tempcount] == (char)0xFF ) && ( recvBuf[tempcount + 1] == (char)0xD8 ) )
  598. {
  599. f_recv = F_RECEIVE_BEGINL;
  600. break;
  601. }                        
  602. }
  603. if(  F_RECEIVE_BEGINL == f_recv )
  604. {
  605. f_recv = F_RECEIVEL;
  606. thisClass->recvBytePointerL = 0;
  607. memcpy( thisClass->recvImageBufL , recvBuf + tempcount , recvLen - tempcount );
  608. thisClass->recvBytePointerL = recvLen - tempcount;
  609. }
  610. }
  611. }
  612. }
  613. }
  614. }
  615. closesocket(m_serverSocket);
  616. WSACleanup();
  617. return TRUE;
  618. }
  619. //UINT ThreadL( LPVOID p)
  620. //{
  621. // WSADATA wsa;
  622. // /* initialize socket  */
  623. // WSAStartup(MAKEWORD(1,1),&wsa);
  624. // Ctest2eyesDlg * thisClass = (Ctest2eyesDlg*)p;
  625. //
  626. // SOCKET m_serverSocket;
  627. //
  628. // /* initialize socket  */
  629. //
  630. // /* create socket  */
  631. // m_serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  632. //
  633. // SOCKADDR_IN  serverAddr;
  634. // ZeroMemory((char *)&serverAddr,sizeof(serverAddr));
  635. // serverAddr.sin_family = AF_INET;
  636. // serverAddr.sin_port = htons(5565);
  637. // serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
  638. //
  639. // /* bind socket  */
  640. // bind(m_serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr));
  641. //
  642. // struct sockaddr_in daddr; 
  643. // memset((void *)&daddr,0,sizeof(daddr)); 
  644. // daddr.sin_family=AF_INET; 
  645. // daddr.sin_port=htons(80);
  646. //
  647. //
  648. // CString str1 ;
  649. //
  650. // thisClass->m_lip->GetWindowText(str1);
  651. //
  652. // char lip[40];
  653. //
  654. // wcstombs(lip , str1.GetBuffer() , 39 );
  655. //
  656. // daddr.sin_addr.s_addr=inet_addr(lip); 
  657. // int error = connect(m_serverSocket,(struct sockaddr *)&daddr,sizeof(daddr)); 
  658. // const char * buf = "GET /MJPEG.CGI HTTP/1.0rnrn";
  659. //
  660. //
  661. // fd_set fdRead; /* Read concourse define. */
  662. // int ret; /* Return value. */
  663. // TIMEVAL aTime; /* Event wait time define. */
  664. //
  665. // char recvBuf[RECV_BUF_SIZE];
  666. // int allcount = 0;
  667. //
  668. // aTime.tv_sec = 1;
  669. // aTime.tv_usec = 0;
  670. //
  671. // int recvLen;
  672. //
  673. // int f_recv = F_RECEIVE_NOWORKL;
  674. //
  675. // send( m_serverSocket,buf,100,0);
  676. //
  677. // TRACE(__T("Left Socket ok.rn"));
  678. // while (thisClass->m_ThreadExit == FALSE)
  679. // {
  680. //
  681. // if (thisClass->m_LeftReceived == TRUE)
  682. // {
  683. // //Sleep(10);
  684. // //continue;
  685. // }
  686. // /* Set empty to the fdRead Event. */
  687. // FD_ZERO(&fdRead);
  688. //
  689. // /* Set read event to the client socket. */
  690. // FD_SET(m_serverSocket,&fdRead);
  691. //
  692. // /* To judge whether there is any read event. */
  693. // ret = select(0,&fdRead,NULL,NULL,&aTime);
  694. // if (ret > 0)
  695. // {
  696. //
  697. // if (FD_ISSET(m_serverSocket,&fdRead))
  698. // {
  699. // /* read event happen */
  700. // recvLen = 0;
  701. //
  702. // /* recieve data */
  703. // memset( recvBuf , 0 , RECV_BUF_SIZE );
  704. // recvLen = recv( m_serverSocket , recvBuf , RECV_BUF_SIZE , 0 );
  705. //
  706. // if( recvLen <= 0 )
  707. // {
  708. // TRACE( _T( "TCP recive nothing ln" ) );
  709. // continue;
  710. // }
  711. //
  712. // if( F_RECEIVE_NOWORKL == f_recv )
  713. // {
  714. // int tempcount;
  715. // for( tempcount = 0 ; tempcount < recvLen - 1 ; tempcount++ )
  716. // {
  717. // if( ( recvBuf[tempcount] == (char)0xFF ) && ( recvBuf[tempcount + 1] == (char)0xD8 ) )
  718. // {
  719. // f_recv = F_RECEIVE_BEGINL;
  720. // break;
  721. // }                        
  722. // }
  723. //
  724. // if(  F_RECEIVE_BEGINL == f_recv )
  725. // {
  726. // f_recv = F_RECEIVEL;
  727. // thisClass->recvBytePointerL = 0;
  728. // memcpy( thisClass->recvImageBufL , recvBuf + tempcount , recvLen - tempcount );
  729. // thisClass->recvBytePointerL = recvLen - tempcount;
  730. // }
  731. // }
  732. // else if( F_RECEIVEL == f_recv )
  733. // {
  734. // int tempcount;
  735. // for( tempcount = 0 ; tempcount < recvLen  ; tempcount++ )
  736. // {
  737. // if( ( recvBuf[tempcount - 2] == (char)0xFF ) && ( recvBuf[tempcount - 1] == (char)0xD9 ) )
  738. // {
  739. // f_recv = F_RECEIVE_OVER_L;
  740. // break;
  741. // }
  742. // }
  743. //
  744. // if( F_RECEIVEL == f_recv )   /* 未接收完一个文件 */
  745. // {
  746. // memcpy( thisClass->recvImageBufL + thisClass->recvBytePointerL , recvBuf , recvLen );
  747. // thisClass->recvBytePointerL += recvLen;
  748. // }
  749. // else if( F_RECEIVE_OVER_L == f_recv ) /* 接收完一个文件 */
  750. // {                        
  751. // memcpy( thisClass->recvImageBufL + thisClass->recvBytePointerL , recvBuf , tempcount );
  752. // thisClass->recvBytePointerL += tempcount;
  753. //
  754. // CString strR;
  755. //
  756. // strR.Format( __T("D:\project\pic\002.jpg") , 1 );
  757. //
  758. // CFile ka;
  759. // if(  ka.Open( strR , CFile::modeCreate | CFile::modeReadWrite ) == TRUE )
  760. // {
  761. // ka.SeekToBegin();
  762. // ka.Write( thisClass->recvImageBufL , thisClass->recvBytePointerL );
  763. // ka.Close();
  764. // thisClass->m_LeftReceived = TRUE;
  765. // }
  766. //
  767. // if( thisClass->f_MutexImageBufL == MUTEX_NONUSE )
  768. // {
  769. // thisClass->f_MutexImageBufL = MUTEX_USE;
  770. // memcpy(thisClass->imageBufL.buf , thisClass->recvImageBufL , thisClass->recvBytePointerL );
  771. //
  772. //
  773. // thisClass->imageBufL.size = thisClass->recvBytePointerL;
  774. // thisClass->f_MutexImageBufL = MUTEX_NONUSE;
  775. // }
  776. //
  777. // f_recv = F_RECEIVE_NOWORKL;
  778. //
  779. // for( ; tempcount < recvLen - 1 ; tempcount++ )
  780. // {
  781. // if( ( recvBuf[tempcount] == (char)0xFF ) && ( recvBuf[tempcount + 1] == (char)0xD8 ) )
  782. // {
  783. // f_recv = F_RECEIVE_BEGINL;
  784. // break;
  785. // }                        
  786. // }
  787. //
  788. // if(  F_RECEIVE_BEGINL == f_recv )
  789. // {
  790. // f_recv = F_RECEIVEL;
  791. // thisClass->recvBytePointerL = 0;
  792. // memcpy( thisClass->recvImageBufL , recvBuf + tempcount , recvLen - tempcount );
  793. // thisClass->recvBytePointerL = recvLen - tempcount;
  794. // }
  795. //
  796. // }
  797. // }
  798. // }
  799. // }
  800. // }
  801. //
  802. //
  803. // closesocket(m_serverSocket);
  804. // WSACleanup();
  805. //
  806. // return TRUE;
  807. //}
  808. //
  809. //
  810. void Ctest2eyesDlg::OnBnClickedButton1()
  811. {
  812. }
  813. void Ctest2eyesDlg::OnTimer(UINT_PTR nIDEvent)
  814. {
  815. // TODO: 在此添加消息处理程序代码和/或调用默认值
  816. switch(nIDEvent)
  817. {
  818. case MYTIMER:
  819. {
  820.   if (m_LeftReceived == TRUE && m_RightReceived == TRUE)
  821.   {
  822.   if (m_processing == FALSE)
  823.   {
  824. test_SIFT();
  825.   }
  826.   }
  827. }
  828. break;
  829. default:
  830. KillTimer(MYTIMER);
  831. break;
  832. }
  833. CDialog::OnTimer(nIDEvent);
  834. }
  835. HBRUSH Ctest2eyesDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
  836. {
  837. HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
  838. switch(nCtlColor)   
  839. {   
  840. case   CTLCOLOR_STATIC:
  841. switch(pWnd->GetDlgCtrlID())
  842. {
  843. case IDC_STATIC_ICON:
  844. {
  845. return m_BMPDisplayBrush;
  846. }
  847. break;
  848. }
  849. }
  850. return hbr;
  851. }
  852. void Ctest2eyesDlg::OnBnClickedCancel()
  853. {
  854. // TODO: 在此添加控件通知处理程序代码
  855. m_ThreadExit = TRUE;
  856. exit(1);
  857. OnCancel();
  858. }