zoukankan      html  css  js  c++  java
  • 马赛克效果

    /// <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;
            }
  • 相关阅读:
    java 深入技术三(List)
    java 深入技术二(Collection)
    java开发JDBC连接数据库详解
    数据库基础和JDBC
    java 深入技术一
    java入门 第三季4
    java入门 第三季3
    04-1. 水仙花数(20)
    04-0. 求符合给定条件的整数集(15)
    03-4. 成绩转换(15)
  • 原文地址:https://www.cnblogs.com/jhabb/p/2015816.html
Copyright © 2011-2022 走看看