📄 imageobjectdlg.cpp.bak
字号:
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 + -