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

蔡袅 2011-04-11 12:57:04
加精
这效果你懂的。

这段代码使用了不安全代码,用了指针,要运行需要更改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;
}


效果:
...全文
4614 215 打赏 收藏 转发到动态 举报
写回复
用AI写文章
215 条回复
切换为时间正序
请发表友善的回复…
发表回复
larissa523 2012-04-10
  • 打赏
  • 举报
回复
谢谢分享。
漫步者 2012-03-24
  • 打赏
  • 举报
回复
其实我更想知道如何去除马赛克,电影的
漫步者 2012-03-24
  • 打赏
  • 举报
回复
支持支持再支持
daguanzi 2011-05-23
  • 打赏
  • 举报
回复
不错不错
wbd6572789 2011-05-16
  • 打赏
  • 举报
回复
收藏下好的代码,以后好好学习
cansum396 2011-04-20
  • 打赏
  • 举报
回复
这个不错的
gaohuili2009 2011-04-20
  • 打赏
  • 举报
回复
很爽,谢谢楼主哦
btxp163 2011-04-20
  • 打赏
  • 举报
回复
[Quote=引用 98 楼 wesweeky 的回复:]

引用 9 楼 effun 的回复:
如果能够自动定位需要马赛克的区域就更好了!
你们都懂的哦!

我懂了 大家可以研究下去码播放器
[/Quote]
牛逼哄哄啊
freetd 2011-04-19
  • 打赏
  • 举报
回复
坚持路过...
koko0123 2011-04-19
  • 打赏
  • 举报
回复
其实我更想知道如何去除马赛克,如果任何部位的就更好,你们懂得。
atlantis141 2011-04-19
  • 打赏
  • 举报
回复
很有用.试过了
yfxucn 2011-04-18
  • 打赏
  • 举报
回复
前天面试, 刚好要研究这个。。
忆往如今 2011-04-18
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 caozhy 的回复:]
另外不知道lz有没有听说一个典故。

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

参考:http://blog.163.com/tefei_2008/blog/static/115728004201002934455265/
[/Quote]hao hao
solshine 2011-04-18
  • 打赏
  • 举报
回复
呵呵,谢谢楼主,受教了
lgs1234 2011-04-18
  • 打赏
  • 举报
回复
还是不太懂
trobin 2011-04-18
  • 打赏
  • 举报
回复
一直以为马赛克要取本区域的色彩平均值
不过看起来楼主用左上角的色彩效果也不错哈
wudegangqwer 2011-04-18
  • 打赏
  • 举报
回复
看看而已................收下了
chenshuiguangnian 2011-04-17
  • 打赏
  • 举报
回复
很好的东西,LZ很强大
鑫心相印 2011-04-17
  • 打赏
  • 举报
回复
不错啊,我要了,谢谢
ibliveicando 2011-04-16
  • 打赏
  • 举报
回复
好东西,谢谢啊
加载更多回复(106)

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧