⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 imageobjectdlg.cpp.bak

📁 实时视频捕获
💻 BAK
📖 第 1 页 / 共 4 页
字号:
				black++;
			}else 
			{
				break;
			}
		}
		if(black>width_trig)
		{
			return TRUE;
		}else
		{
			return false;
		}
	}else
	{
		return false;
	}
}
int CImageObjectDlg::CheckUpEdge(BYTE *processData,long size,int windowSize)
{
	return 0;
}
int CImageObjectDlg::CheckDownEdge(BYTE *processData,long size,int windowSize)
{
	return 0;
}
void CImageObjectDlg::GetRegionImageData()
{
	long left,right,top,bottom;
	long wx,wy;
	int red,green,blue;
	long index;
	long accamulit;
	long l;
	if(!m_regionImageData||!m_bufferVideo)
		return;
	for(int i=0;i<m_SysSetPara.detect_num;i++)
	{
		left=m_SysSetPara.dtr[i].region.left;
		right=m_SysSetPara.dtr[i].region.right;
		top=m_lpbmiVideo->bmiHeader.biHeight-m_SysSetPara.dtr[i].region.bottom;//
		bottom=m_lpbmiVideo->bmiHeader.biHeight-m_SysSetPara.dtr[i].region.top;//
		wx=m_SysSetPara.dtr[i].region.Width();
		wy=m_SysSetPara.dtr[i].region.Height();
		//get data from image
		for(int j=top;j<bottom;j++)
		{
			l=0;
			for(int k=left;k<right;k++)
			{
				index=3*(m_lpbmiVideo->bmiHeader.biWidth*j+k);
				red=m_bufferVideo[index];
				green=m_bufferVideo[index+1];
				blue=m_bufferVideo[index+2];
				m_regionImageData[l++]=(BYTE)(0.299*red+0.587*green+0.144*blue);
			}
		}
		//calculate vertical direction brightness average
		accamulit=0;
		for(int k=0;k<wx;k++)
		{
			for(int j=0;j<wy;j++)
			{
				accamulit+=m_regionImageData[j*wx+k];	
			}
			accamulit=accamulit/wy;
			if(accamulit>255)accamulit=255;
			m_VAverageLight[i][k]=(BYTE)accamulit;
		}
		//calculate block brightness average
		accamulit=0;
		for(int k=0;k<wx;k++)
		{
			accamulit+=m_VAverageLight[i][k];
		}
		accamulit=accamulit/wx;
		if(accamulit>255)accamulit=255;
		m_BrightnessAverage[i]=(BYTE)accamulit;

	}
}
void CImageObjectDlg::DisplayResult()
{
	
/////Main Video Window show, detect region retangle draw on it///////////////////
//	m_bmpMain.SetBitmapBits(m_lpbmiVideo->bmiHeader.biSizeImage,m_bufferVideo);
	CDC memDC;
	CClientDC dc(FromHandle(m_ShowImage.m_hWnd ));//FromHandle(m_ShowImage.m_hWnd )
	memDC.CreateCompatibleDC( &dc);
	COLORREF red=RGB(255,0,0);
	COLORREF green=RGB(0,255,0);
	COLORREF blue=RGB(0,0,255);
	COLORREF yellow=RGB(255,255,0);
	COLORREF pink=RGB(255,0,255);
	COLORREF white=RGB(255,255,255);
	CPen pen(PS_SOLID,1,white);
	CBrush *lpbrush=CBrush::FromHandle((HBRUSH)::GetStockObject(NULL_BRUSH));
	CPen *oldpen=memDC.SelectObject(&pen);
	CBrush*oldbrush=0;
//	oldbrush=memDC.SelectObject(lpbrush);
	CBitmap* pbmpOld = memDC.SelectObject( &m_bmpMain );
	for(int i=0;i<m_SysSetPara.detect_num;i++)
	{
		if(i==m_iCurrentDetectRegionID)
		{
			if(m_iRegionDetectStatu[i]==NO_OBJECT)
			{
				pen.DeleteObject();
				pen.CreatePen(PS_SOLID,1,pink);
			}else
			{
				pen.DeleteObject();
				pen.CreatePen(PS_SOLID,1,yellow);
			}
		}else
		{
			if(m_iRegionDetectStatu[i]==NO_OBJECT)
			{
				pen.DeleteObject();
				pen.CreatePen(PS_SOLID,1,red);
			}else
			{
				pen.DeleteObject();
				pen.CreatePen(PS_SOLID,1,green);
			}
		}
		memDC.SelectObject(&pen);
		memDC.Rectangle(m_SysSetPara.dtr[i].region);
	}
	dc.StretchBlt(0,0,IMAGE_WIDTH,IMAGE_HEIGHT,&memDC,0,0,IMAGE_WIDTH,IMAGE_HEIGHT,SRCCOPY);
	memDC.SelectObject(oldpen);
	memDC.SelectObject(oldbrush);
	memDC.SelectObject(pbmpOld);

/////CRichEdit Controler show data updata///////////////////////////////////////////
	CString str;
	//set detect parameter controller;
	m_ImageLightSlider.SetPos(m_SysSetPara.image_light);
	m_ImageContrastSlider.SetPos(m_SysSetPara.image_contrast);
	m_SetDetectNum.Clear();
	str.Format(_T("%d"),m_SysSetPara.detect_num);
	m_SetDetectNum.SetWindowTextW(str);
	m_SelectDetectRegion.SetCurSel(m_iCurrentDetectRegionID);
	str.Format(_T("%d"),m_SysSetPara.dtr[m_iCurrentDetectRegionID].region.Height());
	m_SetDetectRegionHeight.SetWindowTextW(str);
	str.Format(_T("%d"),m_SysSetPara.dtr[m_iCurrentDetectRegionID].region.Width());
	m_SetDetectRegionWidth.SetWindowTextW(str);
	str.Format(_T("%d"),m_SysSetPara.dtr[m_iCurrentDetectRegionID].threshold);
	m_SetDetectThreshold.SetWindowTextW(str);
	//detect info show controller;
	str.Format(_T("%d"),m_BrightnessAverage[0]);
	m_DetectRegion1Light.SetWindowTextW(str);
	str.Format(_T("%d"),m_BrightnessAverage[1]);
	m_DetectRegion2Light.SetWindowTextW(str);
	str.Format(_T("%d"),m_BrightnessAverage[2]);
	m_DetectRegion3Light.SetWindowTextW(str);
	str.Format(_T("%d"),m_BrightnessAverage[3]);
	m_DetectRegion4Light.SetWindowTextW(str);
	str.Format(_T("%d"),m_BrightnessAverage[4]);
	m_DetectRegion5Light.SetWindowTextW(str);
	str.Format(_T("%d"),m_BrightnessAverage[5]);
	m_DetectRegion6Light.SetWindowTextW(str);
	str.Format(_T("%d"),m_SysSetPara.dtr[0].threshold);
	m_DetectRegion1Threshold.SetWindowTextW(str);
	str.Format(_T("%d"),m_SysSetPara.dtr[1].threshold);
	m_DetectRegion2Threshold.SetWindowTextW(str);
	str.Format(_T("%d"),m_SysSetPara.dtr[2].threshold);
	m_DetectRegion3Threshold.SetWindowTextW(str);
	str.Format(_T("%d"),m_SysSetPara.dtr[3].threshold);
	m_DetectRegion4Threshold.SetWindowTextW(str);
	str.Format(_T("%d"),m_SysSetPara.dtr[4].threshold);
	m_DetectRegion5Threshold.SetWindowTextW(str);
	str.Format(_T("%d"),m_SysSetPara.dtr[5].threshold);
	m_DetectRegion6Threshold.SetWindowTextW(str);
	str.Format(_T("%d"),m_iDetectCountTotal);
	m_Counter.SetWindowTextW(str);

/////Cuver plot Window show//////////////////////////////////////////////////////////
	if(m_SetEnable)
	{////set mode
		int wx;
		double scale;
		BYTE value;
		int index;
		scale=m_SysSetPara.dtr[m_iCurrentDetectRegionID].region.Width()/100;
		memset(m_bufferCurveBlock,240,100*256);
		int threshold=m_SysSetPara.dtr[m_iCurrentDetectRegionID].threshold;
		for(int i=0;i<100;i++)
		{
			value=m_VAverageLight[m_iCurrentDetectRegionID][RoundDouble(i*scale)];
			m_bufferCurveBlock[value*100+i]=0;
			m_bufferCurveBlock[threshold*100+i]=100;
		}
		m_bmpCurve.SetBitmapBits(100*256,m_bufferCurveBlock);
	}else
	{/// detect mode
		m_indexofLightHist;
//		int wx;
//		double scale;
		BYTE value;
//		int index;
		memset(m_bufferCurveHist,240,100*256);
		int threshold=m_SysSetPara.dtr[m_iCurrentDetectRegionID].threshold;///
		for(int i=0;i<100;i++)
		{
			value=m_RegionLightHist[m_iCurrentDetectRegionID][((i+m_indexofLightHist)%100)];
			m_bufferCurveHist[value*100+i]=0;
			m_bufferCurveHist[threshold*100+i]=100;
		}
		m_bmpCurve.SetBitmapBits(100*256,m_bufferCurveHist);
	}
	
	
	CClientDC dcCurve(FromHandle(m_CurveWindow.m_hWnd));
	memDC.Detach();
	memDC.CreateCompatibleDC(&dcCurve);
	pbmpOld=memDC.SelectObject(&m_bmpCurve);
	CRect showRect ;
	m_CurveWindow.GetWindowRect(showRect);
	dcCurve.StretchBlt(0,0,showRect.Width (),showRect.Height(),&memDC,0,0,100,256,SRCCOPY);
	memDC.SelectObject(pbmpOld);
	ReleaseDC(&memDC);

	/*
	void *lp;
	int x;
	int y;
	int ret;
	LPLOGPALETTE pLogPal = (LPLOGPALETTE) new char[2 * sizeof(WORD) +
		256 * sizeof(PALETTEENTRY)];
	pLogPal->palNumEntries=256;
	pLogPal->palVersion=0x300;
	for(int i = 0; i < 256; i++)
	{
		pLogPal->palPalEntry[i].peRed =i;
		pLogPal->palPalEntry[i].peGreen =i;
		pLogPal->palPalEntry[i].peBlue = i;
		pLogPal->palPalEntry[i].peFlags = 0;
	}
	CPalette pa;
	ret=pa.CreatePalette(pLogPal);
//	ret=m_bitmap.SetBitmapBits(64*64,bits);
	CDC memDC;
	CClientDC dc(this);
	ret=memDC.CreateCompatibleDC( &dc );
	CGdiObject *paOld=memDC.SelectObject( &pa );
	CBitmap* pbmpOld = memDC.SelectObject( &m_bitmap );
	ret=dc.BitBlt( 50, 50, 64, 64, &memDC, 0, 0, SRCCOPY );
	memDC.SelectObject( pbmpOld );
	memDC.SelectObject( paOld );
	DeleteObject(pa.m_hObject);
	DeleteObject(dc.m_hDC);
	DeleteDC(memDC.m_hDC);
	delete pLogPal;

	// TODO: Add your control notification handler code here
	CWnd* show=this->GetDlgItem(IDC_SHOW_RECT);
	CPen pen;
	BOOL RET=pen.CreatePen(PS_SOLID,2,RGB(250,0,0));
	BYTE *data=new BYTE[10000];
	for(int i=0;i<10000;i++)
	{
		data[i]=100;
	}
	CDC memDC;
	CClientDC dc(show);
	BITMAP ddb;
	int ret;
	memDC.CreateCompatibleDC(&dc);

	BITMAPINFOHEADER bmi_header;
	bmi_header.biSize=40;
	bmi_header.biHeight=200;
	bmi_header.biWidth=200;
	bmi_header.biPlanes=1;
	bmi_header.biBitCount=8;
	bmi_header.biCompression=BI_RGB;
	bmi_header.biSizeImage=200*200;
	bmi_header.biClrUsed=0;
	bmi_header.biClrImportant=0;
	bmi_header.biXPelsPerMeter=0;
	bmi_header.biYPelsPerMeter=0;
	BITMAPINFO *lpbmi=(LPBITMAPINFO)new BYTE[40+4*256];
	::memcpy(lpbmi,&bmi_header,40);
	RGBQUAD *lprgb=lpbmi->bmiColors;
	for(int i=0;i<256;i++)
	{
		lprgb[i].rgbBlue=i;
		lprgb[i].rgbGreen =i;
		lprgb[i].rgbRed =i;
		lprgb[i].rgbReserved =i;
	}
	void *lpbits=(void *)new BYTE[200*200];
	HBITMAP hnewbmp=CreateDIBSection(
								memDC.m_hDC ,                 // handle to DC
								lpbmi,  // bitmap data
								 DIB_RGB_COLORS,             // data type indicator
								&lpbits,          // bit values
								NULL,         // handle to file mapping object
								0           // offset to bitmap bit values
								);

	for(int i=0;i<40000;i++)
	{
		((BYTE*)lpbits)[i]=i%200;
	}
///method1 直接在目标dc上输出
	ret=StretchDIBits( dc.m_hDC,                      // handle to DC
						  0,                    // x-coord of destination upper-left corner
						  0,                    // y-coord of destination upper-left corner
						 20,               // width of destination rectangle
						  20,              // height of destination rectangle
						 0,                     // x-coord of source upper-left corner
						  0,                     // y-coord of source upper-left corner
						 200,                // width of source rectangle
						  200,               // height of source rectangle
						  lpbits,           // bitmap bits
						  lpbmi, // bitmap data
						  DIB_RGB_COLORS,                  // usage options
						  SRCCOPY                   // raster operation code
						);
///method 2 利用内存dC选中位图,再输出到目标DC;
	memDC.SelectObject(m_bitmap.FromHandle(hnewbmp));
	ret=dc.BitBlt(0, 0, 40, 40, &memDC, 0, 0, SRCCOPY );

///创建DDB位图,再显示;
	m_bitmap.DeleteObject();
	m_bitmap.CreateBitmap(200,200,1,8,lpbits);
//	m_bitmap.Attach(hnewbmp);
	m_bitmap.GetBitmapBits(1000,(LPVOID)data);
	m_bitmap.GetBitmap(&ddb);
//	CPalette * oldpalette=(CPalette*) memDC.SelectObject(&m_Palette);
	CBitmap * pbmpOld = memDC.SelectObject(&m_bitmap);
	ret=dc.BitBlt(0, 0, 64, 64, &memDC, 0, 0, SRCCOPY );
//	memDC.SelectObject(oldpalette);
	memDC.SelectObject(pbmpOld);
////资源中的DDB位图	
	m_bitmap.DeleteObject();
	m_bitmap.LoadBitmapW(MAKEINTRESOURCE(IDB_BITMAP1));
	m_bitmap.GetBitmap(&ddb);
//	m_bitmap.GetBitmapBits(1000,(LPVOID)data);
//	CGdiObject *paOld=memDC.SelectObject( &pa );
	pbmpOld = memDC.SelectObject(&m_bitmap);
	CPen * oldPen=memDC.SelectObject(&pen);
	RET=memDC.Rectangle(2,2,10,10);
	ret=dc.BitBlt(0, 0,80, 80, &memDC, 0, 0, SRCCOPY );
	
	memDC.SelectObject(pbmpOld);
	memDC.SelectObject(oldPen);
	DeleteObject(pen.m_hObject);
//	DeleteDC(memDC);
	memDC.DeleteDC();
	ReleaseDC(&dc);
//	dc.DeleteDC();
//	m_bitmap.DeleteObject();
//	m_bitmap.LoadBitmapW(MAKEINTRESOURCE(IDB_BITMAP1));
//	m_show.SetBitmap((HBITMAP)m_bitmap.m_hObject);
//	this->Invalidate();
	delete data;
*/
}
/*
bool CImageObjectDlg::SetVideoPara()
{
	VIDEOSTREAMINFO vsi;
	int m_CardID=1;
	//设置视频制式
	DSStream_SetVideoStandard(m_CardID, SaveData.standard);
	//设置视频源
	DSStream_RouteInPinToOutPin(m_CardID, SaveData.source, 0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -