图像平滑简单处理

 

//平滑图片
//原理:如果周边8个点,》4个是背景色,则改点改背景色,如果》4是前景色,则改前景色

//边框无处理
int Effect::Smooth()
{

 //周边8色
 // 0  1  2
 // 3  *  4
 // 5  6  7
 bmpcolor pixColor[8];

 //计数器
 int bg_count = 0;
 int f_count = 0;
 for (int x = 2; x <= this->bmpInfo.biWidth - 1;x++)
 {
  for (int y = 2; y <= this->bmpInfo.biHeight - 1;y++)
  {
   bg_count = 0;
   f_count = 0;

   pixColor[0] = this->GetPixColor(x - 1,y - 1);
   pixColor[1] = this->GetPixColor(x,y - 1);
   pixColor[2] = this->GetPixColor(x + 1,y - 1);

   pixColor[3] = this->GetPixColor(x - 1,y);
   pixColor[4] = this->GetPixColor(x + 1,y);

   pixColor[5] = this->GetPixColor(x - 1,y + 1);
   pixColor[6] = this->GetPixColor(x,y + 1);
   pixColor[7] = this->GetPixColor(x + 1,y + 1);

   //比较
   for (int i = 0; i < 8; i++)
   {
    if (pixColor[i] == bgcolor)
    {
     bg_count++;
    } else if (pixColor[i] == fcolor)
    {
     f_count++;
    }
   }

   if(bg_count > 4)
   {
    this->SetPixColor(x,y,bgcolor);
   }
   else if (f_count > 4)
   {
    this->SetPixColor(x,y,fcolor);
   }
  }
 }

 return 0;
}

posted @ 2011-10-21 01:06  剑花  阅读(274)  评论(0编辑  收藏  举报