Topaz
Topaz 's Blog

Topaz 's Blog

C#使用指针实现马赛克效果

Photo by Antoine Merour on Unsplash

C#使用指针实现马赛克效果

Topaz
·Apr 12, 2011·

1 min read

   /// <summary>
   /// 马赛克效果
    ///原理:确定图像的随机位置点和确定马赛克块的大小,然后马赛克块图像覆盖随机点即可.
    /// </summary>
    /// <param name="m\_Iimage"></param>
    /// <param name="val">分割成val\*val像素的小区块</param>
    public Image MaSaiKe(Image m\_PreImage , int val)
    {
        Bitmap MyBitmap = new Bitmap(m\_PreImage);
        if (MyBitmap.Equals(null))
        {
            return null;
        }
        int iWidth = MyBitmap.Width;
        int iHeight = MyBitmap.Height;
        int stdR , stdG , stdB;
        stdR = 0;
        stdG = 0;
        stdB = 0;
        BitmapData srcData = MyBitmap.LockBits(new Rectangle(0 , 0 , iWidth , iHeight) ,
        ImageLockMode.ReadWrite , PixelFormat.Format24bppRgb);
        unsafe
        {
            byte\* point = (byte\*)srcData.Scan0.ToPointer();
            for (int i = 0; i < iHeight; i++)
            {
                for (int j = 0; j < iWidth; j++)
                {
                    if (i % val == 0)
                    {
                        if (j % val == 0)
                        {
                            stdR = point\[2\];
                            stdG = point\[1\];
                            stdB = point\[0\];
                        }
                        else
                        {
                            point\[0\] = (byte)stdB;
                            point\[1\] = (byte)stdG;
                            point\[2\] = (byte)stdR;
                        }
                    }
                    else
                    {
                        //复制上一行  
                        byte\* pTemp = point - srcData.Stride;
                        point\[0\] = (byte)pTemp\[0\];
                        point\[1\] = (byte)pTemp\[1\];
                        point\[2\] = (byte)pTemp\[2\];
                    }
                    point += 3;
                }
                point += srcData.Stride - iWidth \* 3;
            }
            MyBitmap.UnlockBits(srcData);
        }
        return MyBitmap;
    }

(topzs.com/wp-content/uploads/2011/04/192449..) 作者:xx_mm 原文标题:分享一段C#使用指针的代码!! 原文连接:http://topic.csdn.net/u/20110411/12/4a44f138-b8f5-4d72-82eb-6b153eca360e.html

 
Share this