189 8069 5689

全面介绍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;i++)  
  10. {  
  11. for(intj=0;j;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,让你立马感到这个世界多么美妙

再来一个中值滤波的操作

 
 
 
  1. /// 
  2. ///中值滤波  
  3. /// 
  4. ///<paramnameparamname="dgGrayValue"> 
  5. publicvoidMedianFilter(intdgGrayValue)  
  6. {  
  7. //100M双线空间+50M数据库28元/年  
  8. //1G双线空间+200M数据库100元/年  
  9. //QQ:70975363  
  10. bytes;  
  11. byte[]p=newbyte[9];  
  12. inti,j;  
  13. intx,y;  
  14. intStride;  
  15. unsafe  
  16. {  
  17. byte*point=(byte*)this.ImageData.Scan0;  
  18. Stride=this.ImageData.Stride;  
  19. pointpoint=point+3+this.ImageData.Stride;  
  20. for(i=0;i;i++)  
  21. {  
  22. for(j=0;j;j++)  
  23. {  
  24. p[0]=*(point-Stride-1);  
  25. p[1]=*(point-Stride+2);  
  26. p[2]=*(point-Stride+5);  
  27. p[3]=*(point-1);  
  28. p[4]=*(point+2);  
  29. p[5]=*(point+5);  
  30. p[6]=*(point+Stride-1);  
  31. p[7]=*(point+Stride+2);  
  32. p[8]=*(point+Stride+5);  
  33. for(x=0;x<5;x++)  
  34. {  
  35. for(y=x+1;y<9;y++)  
  36. {  
  37. if(p[x]>p[y])  
  38. {  
  39. s=p[x];  
  40. p[x]=p[y];  
  41. p[y]=s;  
  42. }  
  43. }  
  44. }  
  45. *ppoint=p[4];  
  46. *(point-1)=p[4];  
  47. *(point-2)=p[4];  
  48. point+=3;  
  49.  
  50. }  
  51. point+=Stride-this.ImageData.Width*3;  
  52. }  
  53. }  

新闻名称:全面介绍C#指针操作
新闻来源:http://cdxtjz.cn/article/ccdihie.html

联系我们

您好HELLO!
感谢您来到成都网站建设公司,若您有合作意向,请您为我们留言或使用以下方式联系我们, 我们将尽快给你回复,并为您提供真诚的设计服务,谢谢。
  • 电话:028- 86922220 18980695689
  • 商务合作邮箱:631063699@qq.com
  • 合作QQ: 532337155
  • 成都网站设计地址:成都市青羊区锣锅巷31号五金站写字楼6楼

小谭建站工作室

成都小谭网站建设公司拥有多年以上互联网从业经验的团队,始终保持务实的风格,以"帮助客户成功"为已任,专注于提供对客户有价值的服务。 我们已为众企业及上市公司提供专业的网站建设服务。我们不只是一家网站建设的网络公司;我们对营销、技术、管理都有自己独特见解,小谭建站采取“创意+综合+营销”一体化的方式为您提供更专业的服务!

小谭观点

相对传统的成都网站建设公司而言,小谭是互联网中的网站品牌策划,我们精于企业品牌与互联网相结合的整体战略服务。
我们始终认为,网站必须注入企业基因,真正使网站成为企业vi的一部分,让整个网站品牌策划体系变的深入而持久。