Photoshop马赛克效果

void _alpha__fastcall_pre_ TAlpha::Mosaic(AlphaPara *Para)
{
 int left;
 int top;
 int right = (left = Para->X) + Para->Width - 1;
 int bottom = (top = Para->Y) + Para->Height - 1;
 int linebytewidth = Para->bmWidthBytes;
 int destheight_1 = Para->bmHeight - 1;
 int pixeladdplus3 = Para->PixelAdd + 3;
 byte *bmBits = Para->bmBits;
 int radius;
 int radius_1;

 if ((radius = *(int *)Para->AdditionalPara) < 2)
  radius = 2;
 else if (radius > 100)
  radius = 100;

 radius_1 = radius - 1;

 for (int x = left; x <= right; x += radius)
  {
   for (int y = top; y <= bottom; y += radius)
    {
     int sumr = 0;
     int sumg = 0;
     int sumb = 0;
     int ri;
     int bo;

     if ((ri = x + radius_1) > right)
      ri = right;
     if ((bo = y + radius_1) > bottom)
      bo = bottom;

     register int i;
     register int j;
     for (j = y; j <= bo; j++)
      {
       byte *bptr = (bmBits + (destheight_1 - j) * linebytewidth) + pixeladdplus3 * x;

       i = ri - x;
       for ( ; i >= 0; i--)
        {
         sumr += *(bptr + 2);
         sumg += *(bptr + 1);
         sumb += *bptr;

         bptr += pixeladdplus3;
        }
      }

     int v;
     byte bsumr = (byte)(sumr /= (v = (ri - x + 1) * (bo - y + 1)));
     byte bsumg = (byte)(sumg /= v);
     byte bsumb = (byte)(sumb /= v);

     for (j = y; j <= bo; j++)
      {
       byte *bptr = (bmBits + (destheight_1 - j) * linebytewidth) + pixeladdplus3 * x;

       i = ri - x;
       for ( ; i >= 0; i--)
        {
         *(bptr + 2) = bsumr;
         *(bptr + 1) = bsumg;
         *bptr = bsumb;

         bptr += pixeladdplus3;
        }
      }
    }
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值