分享一段C#使用指针的代码!!
这效果你懂的。
这段代码使用了不安全代码,用了指针,要运行需要更改VS配置,Google下。看代码和效果:
/// <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; }
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
[解决办法]
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)可是出不来效果,谁能教教我怎么用呀?新人求助
[解决办法]