首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

分享一段C#运用指针的代码!

2011-12-15 
分享一段C#使用指针的代码!!这效果你懂的。这段代码使用了不安全代码,用了指针,要运行需要更改VS配置,Googl

分享一段C#使用指针的代码!!
这效果你懂的。

这段代码使用了不安全代码,用了指针,要运行需要更改VS配置,Google下。看代码和效果:
 

C# code
 /// <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;        }


效果:


[解决办法]
哦。。这么好的代码收藏了。。。谢谢楼主哦。。。
[解决办法]
凑个热闹吧
[解决办法]
探讨

引用:
哦。。这么好的代码收藏了。。。谢谢楼主哦。。。
*_* 最近研究图像效果的,顺便把这个效果共享出来,不敢独享。

[解决办法]

谢谢分享
[解决办法]
探讨

引用:
引用:

引用:
哦。。这么好的代码收藏了。。。谢谢楼主哦。。。
*_* 最近研究图像效果的,顺便把这个效果共享出来,不敢独享。

我来试一试
试试~~

[解决办法]
如果能够自动定位需要马赛克的区域就更好了!
你们都懂的哦!
[解决办法]
一般马赛克都是打到"肮脏"部位的,请不要打到人家脸上哦
[解决办法]
既然你用指针,那么这几行代码,需要优化一下:
C# code
point[0] = (byte)stdB;point[1] = (byte)stdG;point[2] = (byte)stdR;point[0] = (byte)pTemp[0];point[1] = (byte)pTemp[1];point[2] = (byte)pTemp[2];
------解决方案--------------------


马赛克什么的最讨厌的啦
mark + up
[解决办法]

C# code
static Bitmap Mosaic(Bitmap original, int scale){  Bitmap result = new Bitmap(original.Width * scale, original.Height * scale);  using (Graphics g = Graphics.FromImage(result))  {    g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor;    g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;    g.DrawImage(original, 0, 0, result.Width, result.Height);  }  return result;}
[解决办法]
不错,挺有收获的~
[解决办法]
收藏了。
如果能够指定某一区域就更好了
[解决办法]
另外不知道lz有没有听说一个典故。

就是经典的图像处理算法都会选取某个mm照片作为测试用例。

参考:http://blog.163.com/tefei_2008/blog/static/115728004201002934455265/
[解决办法]
回复拿积分的,最近毕业设计有点烦啊烦
[解决办法]
不错不错
[解决办法]
不错.....
[解决办法]
恩 ,可恨的马赛克!!
[解决办法]
我只知道要用unsafe标记.其他就不知道了
[解决办法]
学习了,谢谢。
[解决办法]
谢谢分享!!!!!!!!
[解决办法]
呵呵 不错 说不定以后能用到
[解决办法]
不错。

[解决办法]
mark 好代码
[解决办法]
真的是大牛啊
[解决办法]
顶个。。。。。。。。。。
[解决办法]
不错喔
[解决办法]
非常谢谢
[解决办法]
收藏,以备不时之需!
[解决办法]
收藏了
[解决办法]
不错!Mark!
[解决办法]
不错不错啊
[解决办法]
学习学习,顶一下~~
[解决办法]
学习,收藏
[解决办法]
额 新手 业余爱好者 不懂 嘿嘿 不好意思
[解决办法]
unSafe那报错
[解决办法]
先收着,说不定有用。
谢谢了!!!!!!!!!
[解决办法]
楼主呀,UnSafe那报错呀,帮忙解决下哈~~~~
[解决办法]
楼主呀,UnSafe那报错呀,帮忙解决下哈~~~~


[解决办法]
请问两个参数填写什么,新人求助~~~
[解决办法]
支持,不错
[解决办法]
我定义了个ButtonClick事件,执行public Image MaSaiKe(Image m_PreImage , int val)
这个方法参数是(pictureBox1.image,1)可是出不来效果,谁能教教我怎么用呀?新人求助
[解决办法]

探讨
我定义了个ButtonClick事件,执行public Image MaSaiKe(Image m_PreImage , int val)
这个方法参数是(pictureBox1.image,1)可是出不来效果,谁能教教我怎么用呀?新人求助

[解决办法]
还是没反应~~~不知道怎么弄的~~
[解决办法]
好了呵呵,忘了,刷新图片了哈
[解决办法]
引用:

引用:
哦。。这么好的代码收藏了。。。谢谢楼主哦。。。
*_* 最近研究图像效果的,顺便把这个效果共享出来,不敢独享。

我来试一试

[解决办法]
这个体现的指针不是太懂,c里面的指针不是太熟悉。
[解决办法]
马赛克阻止了多少年轻人学习的脚步。。
[解决办法]
探讨
哦。。这么好的代码收藏了。。。谢谢楼主哦。。。

[解决办法]
Mark,也许会用得着
[解决办法]
c#很少用指针了。
[解决办法]
很不错啊
[解决办法]
希望后续能出能定位打码的。
[解决办法]
目前还看不懂啊
[解决办法]
还不错
[解决办法]
有没有去码的代码,我觉得那个比较实用
[解决办法]
何苦呢?adobe photoshop可以很好地做出这个效果
都是吃饱了撑的
[解决办法]
要是可以反过来用就好了。
[解决办法]
探讨
如果能够自动定位需要马赛克的区域就更好了!
你们都懂的哦!

热点排行