设计的软件中需要进行产品的定义,最主要就是进行测量段的选择,然而实际操作时发现如果测量段选择较多时,如25个测量段时经常会出现错误,无法保存测量段数据,因此无法进行软件的正常使用。不止是哪里出现了问题?
void CImageMeasureView::OnSegmentSelect()
{
// TODO: 在此添加命令处理程序代码
m_SegmentSelectFlag = true;
CImageMeasureDoc* pDoc = GetDocument();
LPSTR lpDIB; // 指向DIB的指针
LPSTR lpDIBBits; // 指向DIB象素指针
lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) pDoc->GetHDIB());
lpDIBBits = pDoc->GetDibImage()->FindDIBBits(lpDIB);
BeginWaitCursor();
pDoc->GetDibImage()->CornerExtract(lpDIBBits,pDoc->GetDibImage()->DIBWidth(lpDIB),pDoc->GetDibImage()->DIBHeight(lpDIB));
m_PointList1.clear();
m_SegmentList.clear();
int length = pDoc->GetDibImage()->
m_PointList.size();
int x,y,m_ID;
Point pt;
for (int i=0; i<length; i++)
{
m_ID = pDoc->GetDibImage()->m_PointList[i].m_dotID;
x = pDoc->GetDibImage()->m_PointList[i].x;
y = pDoc->GetDibImage()->m_PointList[i].y;
pt.m_dotID = m_ID;
pt.x = x;
pt.y = y;
m_PointList1.push_back(pt);
}
int x1,x2,y1,y2;
for (int i=0; i<length-1; i++)
{
x1 = m_PointList1[i].x;
y1 = m_PointList1[i].y;
x2 = m_PointList1[i+1].x;
y2 = m_PointList1[i+1].y;
if (abs(x1-x2)>1 || abs(y1-y2)>1)
{
m_ContourNum++;
}
}
m_EachContourSize = new int[m_ContourNum+1];
m_EachContourSize[0] = 0;
m_ContourNum = 1;
for (int i=0; i<length-1; i++)
{
x1 = m_PointList1[i].x;
y1 = m_PointList1[i].y;
x2 = m_PointList1[i+1].x;
y2 = m_PointList1[i+1].y;
if (abs(x1-x2)>1 || abs(y1-y2)>1)
{
m_EachContourSize[m_ContourNum] = i+1;
m_ContourNum++;
}
}
m_EachContourSize[m_ContourNum] = length;
EndWaitCursor();
MessageBox(_T("请拖动鼠标框选测量曲线!"),_T("系统提示"), MB_ICONINFORMATION | MB_OK);
//m_segSelect = TRUE;
}