MV900视频卡裁剪。

This commit is contained in:
TAO Cheng
2015-01-08 16:18:58 +08:00
parent 796e3f224d
commit 5239012bdc
5 changed files with 169 additions and 158 deletions
@@ -4782,3 +4782,5 @@ Usb Port Initialized.
Init:Open device succeed .
_start_machine
Exit: Exit_SO7Usb
@@ -30,6 +30,7 @@ IMPLEMENT_DYNAMIC(CSo7_Util_PLC_TCPIP_SERVER, CDialog)
{
m_CCDData_D10000[i]=0;
}
m_iCCDDataIndex=0;
}
CSo7_Util_PLC_TCPIP_SERVER::~CSo7_Util_PLC_TCPIP_SERVER()
@@ -100,83 +101,14 @@ BOOL CSo7_Util_PLC_TCPIP_SERVER::OnInitDialog()
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_PLC_STATE)->SetWindowTextW(str);
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_PORTNUMBER)->SetWindowTextW(_T("9600"));
int i(0);
m_CCDData_D10000[i++]=65000;
m_CCDData_D10000[i++]=1000;
m_CCDData_D10000[i++]=1000;
m_CCDData_D10000[i++]=2000;
m_CCDData_D10000[i++]=i*1000;
m_CCDData_D10000[i++]=i*1000;
m_CCDData_D10000[i++]=303000;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=303000;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=303000;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=204000;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=204000;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=204000;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=204000;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=204000;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=204000;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=204000;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=204000;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=0;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=10000;
if (g_pSo7_TCPIP_Server)
{
int iData(0);
BYTE DM_Data[4]={0,0,0,0};
int StartAddr(60);
for (int i=0;i<MAX_CCD_ADDR;i++)
{
iData=m_CCDData_D10000[i];
DM_Data[0]=(iData>>24) & 0x0ff;
DM_Data[1]=(iData>>16) & 0x0ff;
DM_Data[2]=(iData>>8) & 0x0ff;
DM_Data[3]=iData & 0x0ff;
g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i]=(DM_Data[2]<<8)+DM_Data[3];
g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1];
}
}
if (g_pSo7_TCPIP_Server)
UpdataCCDData();
int index(0);
/*
index=100;
g_pSo7_TCPIP_Server->DM5000[index++]=1;
g_pSo7_TCPIP_Server->DM5000[index++]=0;
g_pSo7_TCPIP_Server->DM5000[index++]=10000;
g_pSo7_TCPIP_Server->DM5000[index++]=0;*/
{
int iData(0);
BYTE DM_Data[4]={0,0,0,0};
@@ -212,64 +144,10 @@ BOOL CSo7_Util_PLC_TCPIP_SERVER::OnInitDialog()
g_pSo7_TCPIP_Server->DM5000[StartAddr+2*i]=(DM_Data[2]<<8)+DM_Data[3];
g_pSo7_TCPIP_Server->DM5000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1];
}
StartAddr=1100;
for (int i=0;i<150;i++)
{
iDM5000DWord[i]=0;
}
StartAddr=400;
index=0;
for (int i=0;i<10;i++)
{
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
index=3*(i+1);
}
for (int i=0;i<6;i++)
{
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
index=3*(i+11);
}
for (int i=0;i<150;i++)
{
iData=iDM5000DWord[i];
DM_Data[0]=(iData>>24) & 0x0ff;
DM_Data[1]=(iData>>16) & 0x0ff;
DM_Data[2]=(iData>>8) & 0x0ff;
DM_Data[3]=iData & 0x0ff;
g_pSo7_TCPIP_Server->DM5000[StartAddr+2*i]=(DM_Data[2]<<8)+DM_Data[3];
g_pSo7_TCPIP_Server->DM5000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1];
}
for (int i=0;i<150;i++)
{
iDM5000DWord[i]=0;
}
StartAddr=500;
index=0;
for (int i=0;i<10;i++)
{
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
index=3*(i+1);
}
for (int i=0;i<6;i++)
{
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
iDM5000DWord[index++]=(i+1)*10000;
index=3*(i+11);
}
for (int i=0;i<150;i++)
{
iData=iDM5000DWord[i];
iData=iDM5000DWord[i]+i*10;
DM_Data[0]=(iData>>24) & 0x0ff;
DM_Data[1]=(iData>>16) & 0x0ff;
DM_Data[2]=(iData>>8) & 0x0ff;
@@ -279,6 +157,27 @@ BOOL CSo7_Util_PLC_TCPIP_SERVER::OnInitDialog()
g_pSo7_TCPIP_Server->DM5000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1];
}
}
index=114;
g_pSo7_TCPIP_Server->DM5000[index++]=1;
g_pSo7_TCPIP_Server->DM5000[index++]=0;
g_pSo7_TCPIP_Server->DM5000[index++]=20000;
g_pSo7_TCPIP_Server->DM5000[index++]=0;
index=400;
g_pSo7_TCPIP_Server->DM5000[index]=0;
index+=2;
g_pSo7_TCPIP_Server->DM5000[index]=0;
index+=2;
g_pSo7_TCPIP_Server->DM5000[index]=10000;
index+=2;
g_pSo7_TCPIP_Server->DM5000[index]=10000;
index+=2;
g_pSo7_TCPIP_Server->DM5000[index]=10000;
index+=2;
g_pSo7_TCPIP_Server->DM5000[index]=0;
index+=2;
m_DMAddrList=DM_ADDR_CCD;
((CButton *)GetDlgItem(IDC_RADIO_PLC_TCPIP_SERVER_ADDR_CCD_DM))->SetCheck(TRUE);
@@ -351,12 +250,11 @@ void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateControls(int _type)
BYTE DM_Data[4]={0,0,0,0};
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCRunningState=static_cast<int>(g_pSo7_TCPIP_Server->DM5000[0]);
for (int i=1;i<=8;i++)
for (int i=1;i<=16;i++)
{
DM_Data[0]=(g_pSo7_TCPIP_Server->DM5000[i]>>8) & 0x0ff;
DM_Data[1]=(g_pSo7_TCPIP_Server->DM5000[i]) & 0x0ff;
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[(i-1)*2+1]=DM_Data[0];
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[(i-1)*2]=DM_Data[1];
g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[i-1]=DM_Data[1];;
}
str.Format(_T("%d"),g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[OMRON_PLC_CCD1_CAMERA1]);
GetDlgItem(IDC_EDIT_PLC_TCPIP_SERVER_STATE_CCD1)->SetWindowTextW(str);
@@ -400,15 +298,86 @@ void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateControls(int _type)
BYTE DM_Data[4]={0,0,0,0};
g_pSo7_TCPIP_Server->DM5000[0]=static_cast<short>(g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCRunningState);
for (int i=1;i<=8;i++)
for (int i=1;i<=16;i++)
{
DM_Data[1]=g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[(i-1)*2];
DM_Data[0]=g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[(i-1)*2+1];
DM_Data[1]=g_pSo7_TCPIP_Server->m_TCPIPServerState._PLCSensorState[i-1];
DM_Data[0]=0;
g_pSo7_TCPIP_Server->DM5000[i]=(DM_Data[0]<<8)+DM_Data[1];
}
}
}
//=====================================================================
void CSo7_Util_PLC_TCPIP_SERVER::UpdataCCDData()
{
int i(0);
if (m_iCCDDataIndex==0)
{
m_iCCDDataIndex=1;
m_CCDData_D10000[i++]=12000;
m_CCDData_D10000[i++]=1000;
m_CCDData_D10000[i++]=1000;
m_CCDData_D10000[i++]=204000;
m_CCDData_D10000[i++]=-10000;
m_CCDData_D10000[i++]=-10000;
m_CCDData_D10000[i++]=-10000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=204000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=-10000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=10000;
}
else
{
m_iCCDDataIndex=0;
m_CCDData_D10000[i++]=7000;
m_CCDData_D10000[i++]=1000;
m_CCDData_D10000[i++]=1000;
m_CCDData_D10000[i++]=204000;
m_CCDData_D10000[i++]=-10000;
m_CCDData_D10000[i++]=-10000;
m_CCDData_D10000[i++]=-10000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=204000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=-10000;
m_CCDData_D10000[i++]=10000;
m_CCDData_D10000[i++]=10000;
}
if (g_pSo7_TCPIP_Server)
{
int iData(0);
BYTE DM_Data[4]={0,0,0,0};
int StartAddr(60);
for (int i=0;i<MAX_CCD_ADDR;i++)
{
iData=m_CCDData_D10000[i];
DM_Data[0]=(iData>>24) & 0x0ff;
DM_Data[1]=(iData>>16) & 0x0ff;
DM_Data[2]=(iData>>8) & 0x0ff;
DM_Data[3]=iData & 0x0ff;
g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i]=(DM_Data[2]<<8)+DM_Data[3];
g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1];
}
StartAddr=2060;
for (int i=0;i<MAX_CCD_ADDR;i++)
{
iData=m_CCDData_D10000[i];
DM_Data[0]=(iData>>24) & 0x0ff;
DM_Data[1]=(iData>>16) & 0x0ff;
DM_Data[2]=(iData>>8) & 0x0ff;
DM_Data[3]=iData & 0x0ff;
g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i]=(DM_Data[2]<<8)+DM_Data[3];
g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i+1]=(DM_Data[0]<<8)+DM_Data[1];
}
}
}
//=====================================================================
void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedRadioPlcTcpipServerAddrCcdDm()
{
m_UpdateListControl(E_LISTCTRL_CONTROL2DATA);
@@ -416,6 +385,7 @@ void CSo7_Util_PLC_TCPIP_SERVER::OnBnClickedRadioPlcTcpipServerAddrCcdDm()
{
m_UpdateControls(FALSE);
}
UpdataCCDData();
m_DMAddrList=DM_ADDR_CCD;
m_UpdateListControl(E_LISTCTRL_TITLE);
m_UpdateListControl(E_LISTCTRL_DATA2CONTROL);
@@ -525,13 +495,20 @@ void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateListControl(int _type)
}
int Addr(0);
m_DataList.SetItemText(Addr++,2,_T("PLC设备运行状态(0-未知,1-空闲,2-后退(开始测量),3-前进(测量结束),4-故障,5-参数编辑)"));
m_DataList.SetItemText(Addr++,2,_T("CCD1数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD2数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD3数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD4数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD5数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("LS1数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("LS2数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD1-1数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD1-2数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD2-1数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD2-2数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD3-1数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD3-2数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD4-1数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD4-2数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD5-1数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("CCD5-2数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("LS1-1数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("LS1-2数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("LS2-1数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("LS2-2数据刷新"));
m_DataList.SetItemText(Addr++,2,_T("光栅尺数据刷新"));
Addr=100;
for (int i=0;i<10;i++)
@@ -674,6 +651,15 @@ void CSo7_Util_PLC_TCPIP_SERVER::m_UpdateListControl(int _type)
DM_Data[3]=(g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i]) & 0x0ff;
m_CCDData_D10000[i]=(DM_Data[0]<<24)+(DM_Data[1]<<16)+(DM_Data[2]<<8)+(DM_Data[3]);
}
StartAddr=2060;
for (int i=0;i<MAX_CCD_ADDR;i++)
{
DM_Data[0]=(g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i+1]>>8) & 0x0ff;
DM_Data[1]=(g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i+1]) & 0x0ff;
DM_Data[2]=(g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i]>>8) & 0x0ff;
DM_Data[3]=(g_pSo7_TCPIP_Server->DM10000[StartAddr+2*i]) & 0x0ff;
m_CCDData_D10000[i]=(DM_Data[0]<<24)+(DM_Data[1]<<16)+(DM_Data[2]<<8)+(DM_Data[3]);
}
}
for (int i=iStartRow; i<iEndRow; i++)
{
@@ -39,7 +39,8 @@ public:
afx_msg void OnBnClickedButtonClearMsg();
afx_msg void OnBnClickedCancel();
afx_msg BOOL PreTranslateMessage(MSG* pMsg);
int m_iCCDDataIndex;
void UpdataCCDData();
LRESULT OnSocket(WPARAM w, LPARAM p);
LRESULT OnTCPIPMsg(WPARAM w, LPARAM p);
@@ -12,8 +12,8 @@
#define WM_UPDATE_IMAGE WM_USER+100
static BYTE g_DataBuffer[768*576*3];
int m_VideoWidth=640;//640;
int m_VideoHeight=480;//480;
int m_VideoWidth=768;//640;
int m_VideoHeight=576;//480;
int m_VideoBitcount=3;
int m_DisplayWidth=640;
int m_DisplayHeight=480;
@@ -275,9 +275,9 @@ void CVideocard_MV900::ConvertVideoSubType(const Image_Buffer& _ImageBuffer,
{
case RGB24TORGB:
{
pDstData[x+2]=_pSrcData[y*m_VideoWidth*3+x+2];
pDstData[x+1]=_pSrcData[y*m_VideoWidth*3+x+1];
pDstData[x]=_pSrcData[y*m_VideoWidth*3+x];
pDstData[x+2]=_pSrcData[y*m_DisplayWidth*3+x+2];
pDstData[x+1]=_pSrcData[y*m_DisplayWidth*3+x+1];
pDstData[x]=_pSrcData[y*m_DisplayWidth*3+x];
break;
}
case YUY2TORGB:
@@ -462,6 +462,7 @@ void CVideocard_MV900::OnPaint()
pData = (BYTE *)m_ImageBuffer.ScanLine;
pBitBmp.CreateCompatibleBitmap(dc,m_DisplayWidth,m_DisplayHeight);
SetDIBits(dc->m_hDC,pBitBmp,0,m_DisplayHeight,pData,&bmpInfo,DIB_RGB_COLORS);
if (m_bSaveFile)
{
SaveBitmapToFile(pBitBmp,m_SaveFile);
@@ -476,13 +477,34 @@ void CVideocard_MV900::OnPaint()
}
pOldBitmap = pMemDC->SelectObject(&pBitBmp);
nMode = pMemDC->SetBkMode(TRANSPARENT);
CPen m_Pen(PS_DASH,0,RGB(255,0,0));
POINT m_point;
pMemDC->SelectObject(&m_Pen);
m_point.x=0;
m_point.y=static_cast<int>(m_DisplayHeight*0.5);
pMemDC->MoveTo(m_point);
m_point.x=m_DisplayWidth;
m_point.y=static_cast<int>(m_DisplayHeight*0.5);
pMemDC->LineTo(m_point);
m_point.x=static_cast<int>(m_DisplayWidth*0.5);
m_point.y=0;
pMemDC->MoveTo(m_point);
m_point.x=static_cast<int>(m_DisplayWidth*0.5);
m_point.y=m_DisplayHeight;
pMemDC->LineTo(m_point);
dc->BitBlt(0, 0, m_DisplayWidth, m_DisplayHeight, pMemDC,0,0, SRCCOPY);
pMemDC->SetBkMode(nMode);
pMemDC->SelectObject(pOldBitmap);
ReleaseDC(pMemDC);
m_Pen.DeleteObject();
delete pMemDC;
ReleaseDC(dc);
}
//================================================================================================
void CVideocard_MV900::UpdateImage()
@@ -512,19 +534,19 @@ void CVideocard_MV900::OnTimer(UINT_PTR nIDEvent)
CDialog::OnTimer(nIDEvent);
}
static int iStartX(0);
static int iStartY(0);
static int iStartX(64);
static int iStartY(48);
//==================================SV4000E=====================================
VOID CALLBACK MV900_PrcVidCapCallBack( PUCHAR pData, ULONG Length,CVideocard_MV900* pIS)
VOID CALLBACK MV900_PrcVidCapCallBack(PUCHAR pData, ULONG Length,CVideocard_MV900* pIS)
{
UNREFERENCED_PARAMETER(Length);
//memcpy(g_DataBuffer,(BYTE*)pData,Length);//640*480*m_VideoBitcount
for(int y=iStartY;y<iStartY+480;y++)
for(int y=iStartY;y<iStartY+m_DisplayHeight;y++)
{
for(int x=iStartX*3;x<(iStartX+640)*3;x++)
for(int x=iStartX*3;x<(iStartX+m_DisplayWidth)*3;x++)
{
g_DataBuffer[(y-iStartY)*640*3+(x-iStartX)]=(BYTE)pData[y*768*3+x];
g_DataBuffer[(y-iStartY)*m_DisplayWidth*3+(x-iStartX*3)]=(BYTE)pData[y*m_VideoWidth*3+x];
}
}
pIS->UpdateImage();