温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#指针怎么用

发布时间:2021-12-01 11:42:41 来源:亿速云 阅读:161 作者:小新 栏目:编程语言

这篇文章主要介绍C#指针怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

提及.NET的指针操作,很多人并不是很了解,甚至还不知道有这么个东东,由于C#指针操作属于unsafe操作,所以很多人对unsafe使用起来都很谨慎,其实所谓不安全代码,其实是不受控于CLR控制下的托管执行,相当于CLR领导下的部分区域自治,当然CLR也不会去关心不安全代码的内存分配和回收。费话少说,先体验一下适当的C#指针操作带来的性能提升。平时我们通过GDI+操作稍大点图片象素时,都会有一种濒临崩溃的感觉,我们转下用C#指针操作

  1. Bitmapmap=newBitmap(path);  

  2. //将图片位图区域进行锁定  

  3. BitmapDatamapdata=map.LockBits(newRectangle(0,0,map.Width,map.Height),
    ImageLockMode.ReadWrite,PixelFormat.Format24bppRgb);  

  4. unsafe  

  5. {  

  6. byte*pixpoint;  

  7. intnewpoint;  

  8.  

  9. for(inti=0;i<map.Width;i++)  

  10. {  

  11. for(intj=0;j<map.Height;j++)  

  12. {  

  13. //位图结构存在一个字节对齐问题。  

  14. pixpoint=(byte*)mapdata.Scan0;+i*3+j*mapdata.Stride;  

  15. newpoint=(*pixpoint*11+*(pixpoint+1)*59+*(pixpoint+2)*30)/100;  

  16. *(pixpoint++)=(byte)newpoint;  

  17. *(pixpoint++)=(byte)newpoint;  

  18. *(pixpoint++)=(byte)newpoint;  

  19.  

  20. //非指针操作  

  21. //Colorpxcl=map.GetPixel(i,j);  

  22. //map.SetPixel(i,j,(pxcl.R*11+pxcl.G*59+pxcl*30)/100);  

  23. }  

  24. }  

  25. }  

  26. //将位图内存区域进行解锁  

  27. map.UnlockBits(mapdata);  

  28. map.Dispose(); 

比较GDI+使用的GetPixel/SetPixel,让你立马感到这个世界多么美妙

再来一个中值滤波的操作

///<summary> ///中值滤波  ///</summary> ///<paramnameparamname="dgGrayValue"></param> 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<this.ImageData.Height-1;i++)  {  for(j=0;j<this.ImageData.Width-1;j++)  {  p[0]=*(point-Stride-1);  p[1]=*(point-Stride+2);  p[2]=*(point-Stride+5);  p[3]=*(point-1);  p[4]=*(point+2);  p[5]=*(point+5);  p[6]=*(point+Stride-1);  p[7]=*(point+Stride+2);  p[8]=*(point+Stride+5);  for(x=0;x<5;x++)  {  for(y=x+1;y<9;y++)  {  if(p[x]>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#指针怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI