您好,登錄后才能下訂單哦!
這篇文章主要介紹C#指針怎么用,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
提及.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<map.Width;i++)
{
for(intj=0;j<map.Height;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,讓你立馬感到這個世界多么美妙
再來一個中值濾波的操作
///<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#指針怎么用”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。