扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要介绍C#指针怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
创新互联公司主要从事网站设计、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务洪山,十余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
提及.NET的指针操作,很多人并不是很了解,甚至还不知道有这么个东东,由于C#指针操作属于unsafe操作,所以很多人对unsafe使用起来都很谨慎,其实所谓不安全代码,其实是不受控于CLR控制下的托管执行,相当于CLR领导下的部分区域自治,当然CLR也不会去关心不安全代码的内存分配和回收。费话少说,先体验一下适当的C#指针操作带来的性能提升。平时我们通过GDI+操作稍大点图片象素时,都会有一种濒临崩溃的感觉,我们转下用C#指针操作
Bitmapmap=newBitmap(path);
//将图片位图区域进行锁定
BitmapDatamapdata=map.LockBits(newRectangle(0,0,map.Width,map.Height),
ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);unsafe
{
byte*pixpoint;
intnewpoint;
for(inti=0;i
;i++) {
for(intj=0;j
;j++) {
//位图结构存在一个字节对齐问题。
pixpoint=(byte*)mapdata.Scan0;+i*3+j*mapdata.Stride;
newpoint=(*pixpoint*11+*(pixpoint+1)*59+*(pixpoint+2)*30)/100;
*(pixpoint++)=(byte)newpoint;
*(pixpoint++)=(byte)newpoint;
*(pixpoint++)=(byte)newpoint;
//非指针操作
//Colorpxcl=map.GetPixel(i,j);
//map.SetPixel(i,j,(pxcl.R*11+pxcl.G*59+pxcl*30)/100);
}
}
}
//将位图内存区域进行解锁
map.UnlockBits(mapdata);
map.Dispose();
比较GDI+使用的GetPixel/SetPixel,让你立马感到这个世界多么美妙
再来一个中值滤波的操作
//////中值滤波 /// ///publicvoidMedianFilter(intdgGrayValue) { //100M双线空间+50M数据库28元/年 //1G双线空间+200M数据库100元/年 //QQ:70975363 bytes; byte[]p=newbyte[9]; inti,j; intx,y; intStride; unsafe { byte*point=(byte*)this.ImageData.Scan0; Stride=this.ImageData.Stride; pointpoint=point+3+this.ImageData.Stride; for(i=0;i p[y]) { s=p[x]; p[x]=p[y]; p[y]=s; } } } *ppoint=p[4]; *(point-1)=p[4]; *(point-2)=p[4]; point+=3; } point+=Stride-this.ImageData.Width*3; } } }
以上是“C#指针怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流