平均值灰度的问题
这是我的代码,可是执行起来就基本上失去响应了,而且无法生成灰度图,为什么?
int GraphProc::ToAverage(Bitmap *bitmap)
{
pDlg.STOP = false;
int i,j,r,g,b,rr,rx,gx,bx;
Color clrCurrent; // 当前像素颜色
int blocksize = 3; // 取平均值的区域
int count = 0;
// 得到长&宽
int row = bitmap->GetWidth();
int col = bitmap->GetHeight();
Color *M = new Color[row * col]; // 分配整张图像大小
//while(!::IsWindow(pDlg.GetSafeHwnd()));
//while(!::IsWindow(pDlg.pProg->GetSafeHwnd()));
//pDlg.pProg->SetRange(0,row-1);
//pDlg.pProg->SetPos(0);
//pDlg.pProg->SetStep(1);
//pDlg.DoModal();
// 根据平均值灰度处理算法进行处理
for(i=0; i<col-1; i++)
{
for(j = 0; j <= row-1 ; j++)
{
rx=0; gx=0; bx=0; // 初始化
for( int k1= -int(blocksize / 2); k1<= int(blocksize / 2); k1++) // row
for(int k2=-int(blocksize / 2); k2 <= int(blocksize / 2); k2++) // col
{
if(j+k1>0 && j+k1<row && i+k2>0 && i+k2 <col)
bitmap->GetPixel(j+k1,i+k2,&clrCurrent);
r = clrCurrent.GetR();
g = clrCurrent.GetG();
b = clrCurrent.GetB();
rx += r;
gx += g;
bx += b;
}// for k1&k2
rx=(rx + gx + bx)/3;
rr=rx / (blocksize * blocksize);
M[count++].SetValue(Color::MakeARGB( clrCurrent.GetA(),rr,rr,rr)); // 给内存中镜像辅值
/*
if(::IsWindow(pDlg.GetSafeHwnd()))
if(pDlg.STOP)
{
if(::IsWindow(pDlg.GetSafeHwnd()))
pDlg.EndDialog(IDOK);
return 0;
} */
}// for j
//if(::IsWindow(pDlg.GetSafeHwnd()))
//pDlg.pProg->StepIt();
}//for i
//if(::IsWindow(pDlg.GetSafeHwnd()))
//pDlg.EndDialog(IDOK);
for (int m=0; m<row; m++)
for(int n=0; n<col; n++)
bitmap->SetPixel(m,n, M[n*row+m]);
delete []M;
return 1;
}
用的是GDI+, 试验的样本是一张jpeg