void CMy3DShowImageView::RegionGrow()
{
CClientDC dc(this);
CDC* pDC=&dc;
CMy3DShowImageDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int Image[256][256];
int put[256*256];
COLORREF color; struct DATA
{
int data;
int flag;
}; DATA p[256*256]; int i;
int j;
int k;//循环控制变量
int nWidth=256;
int nHeight=256;
int nWidthStep=256; for(int m=0;m<256;++m)
{//将每片数据存入image数组
for(int n=0;n<256;++n)
Image[m][n]=*(*(pDoc->IntigrateData+m_slice)+n+m*256);
} if (!pDoc)
return; CRect rect;
GetClientRect(rect);
int center_x,center_y;
center_x=rect.left + rect.Width()/2;
center_y=rect.top + rect.Height()/2;
CPoint pt;
static int nDx[]={-1,0,1,0};
static int nDy[]={0,1,0,-1}; //种子点
int nSeedX=nWidth/2;
int nSeedY=nHeight/2;
//定义栈,存储坐标
int *GrowStkX;
int *GrowStkY; GrowStkX=new int[nWidth*nHeight];
GrowStkY=new int[nWidth*nHeight];
//定义栈的起点和终点
int nStart=0;
int nEnd=0; //初始化
GrowStkX[nEnd]=nSeedX;
GrowStkY[nEnd]=nSeedY; //当前正在处理的像素
int nCurrX;
int nCurrY; for(j=0;j<256;j++)
{
for(i=0;i<256;i++)
{
put[i+256*j]=Image[j][i];
p[j*256+i].data=put[j*256+i];
p[j*256+i].flag=0;
}
}
while(nStart<=nEnd)
{
nCurrX=GrowStkX[nStart];
nCurrY=GrowStkY[nStart]; for(k=0;k<4;k++)
{
i=nCurrX+nDx[k];
j=nCurrY+nDy[k];
if((i<nWidth)&&(i>=0)&&(j<nHeight)&&(j>=0)&&(p[j*256+i].flag==0)&&abs(p[i+256*j].data-p[nCurrY*256+nCurrX].data)<80)
{
nEnd++;
pt.y=center_y+j;
pt.x=center_x+i;
GrowStkX[nEnd]=i;
GrowStkY[nEnd]=j;
p[j*256+i].data=255; color=RGB(255,0,0);
p[j*256+i].flag=1;
pDC->SetPixel(pt,color);
}
}
nStart++;
} delete[]GrowStkX;
delete[]GrowStkY;
GrowStkX=NULL;
GrowStkY=NULL;
}此程序运行可以运行,但是单击相关按钮之后弹出错误:unknow software exception,只有将处理结构体的那部分注掉之后才不会弹错,各位大侠给看看,到底哪里有错啊,在线等!!!
{
CClientDC dc(this);
CDC* pDC=&dc;
CMy3DShowImageDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
int Image[256][256];
int put[256*256];
COLORREF color; struct DATA
{
int data;
int flag;
}; DATA p[256*256]; int i;
int j;
int k;//循环控制变量
int nWidth=256;
int nHeight=256;
int nWidthStep=256; for(int m=0;m<256;++m)
{//将每片数据存入image数组
for(int n=0;n<256;++n)
Image[m][n]=*(*(pDoc->IntigrateData+m_slice)+n+m*256);
} if (!pDoc)
return; CRect rect;
GetClientRect(rect);
int center_x,center_y;
center_x=rect.left + rect.Width()/2;
center_y=rect.top + rect.Height()/2;
CPoint pt;
static int nDx[]={-1,0,1,0};
static int nDy[]={0,1,0,-1}; //种子点
int nSeedX=nWidth/2;
int nSeedY=nHeight/2;
//定义栈,存储坐标
int *GrowStkX;
int *GrowStkY; GrowStkX=new int[nWidth*nHeight];
GrowStkY=new int[nWidth*nHeight];
//定义栈的起点和终点
int nStart=0;
int nEnd=0; //初始化
GrowStkX[nEnd]=nSeedX;
GrowStkY[nEnd]=nSeedY; //当前正在处理的像素
int nCurrX;
int nCurrY; for(j=0;j<256;j++)
{
for(i=0;i<256;i++)
{
put[i+256*j]=Image[j][i];
p[j*256+i].data=put[j*256+i];
p[j*256+i].flag=0;
}
}
while(nStart<=nEnd)
{
nCurrX=GrowStkX[nStart];
nCurrY=GrowStkY[nStart]; for(k=0;k<4;k++)
{
i=nCurrX+nDx[k];
j=nCurrY+nDy[k];
if((i<nWidth)&&(i>=0)&&(j<nHeight)&&(j>=0)&&(p[j*256+i].flag==0)&&abs(p[i+256*j].data-p[nCurrY*256+nCurrX].data)<80)
{
nEnd++;
pt.y=center_y+j;
pt.x=center_x+i;
GrowStkX[nEnd]=i;
GrowStkY[nEnd]=j;
p[j*256+i].data=255; color=RGB(255,0,0);
p[j*256+i].flag=1;
pDC->SetPixel(pt,color);
}
}
nStart++;
} delete[]GrowStkX;
delete[]GrowStkY;
GrowStkX=NULL;
GrowStkY=NULL;
}此程序运行可以运行,但是单击相关按钮之后弹出错误:unknow software exception,只有将处理结构体的那部分注掉之后才不会弹错,各位大侠给看看,到底哪里有错啊,在线等!!!
解决方案 »
- 上一贴没找到答案,接着问!
- 请教vc怎么读取EXCEL数据
- 请大虾解一下,关于使用_CrtDumpMemoryLeaks();检查内存泄露的问题
- realloc的问题~
- 240分求组件的一些简单使用方法,有关NetMeeting SDK COM的,关键时刻了,赶程序啊,这也是全部家底了
- 请问我能在COM里编写无界面的使用CSOCKET,CSOCKETFILE,CARCHIVE的程序吗?
- CSocket网络监听的问题?
- 如何画股票中的k线图
- 程序运行时将combobox的style改为drop list,modifystyle返回成功,为何仍能编辑?
- 求 比较好的弹出气泡提示控件,就是右下角慢慢升起的那种
- 如果查找USB设备可用于读取的GUID值。
- 关于xmllite的问题,恳请高手解答一下!
struct DATA
{
int data;
int flag;
};
DATA p[256*256]; 我把它的大小改成63600运行就没有错,63700还会弹错 数组还有上界啊?
请问这一句中pDoc->IntigrateData与m_slice各指什么呀,最好把他们的定义粘出来
或者你把写的这个区域生长的项目发过来吧,谢谢了,我急需
[email protected]