问题描述
- c#程序里有个地方出错,提示unsafe使用不正确,(c#)
-
private void button2_Click(object sender, EventArgs e)
{
Bitmap src = new Bitmap(pictureBox1.Image);
int w = pictureBox1.Image.Width;
int h = pictureBox1.Image.Height;
try
{
Bitmap bitmap1 = new Bitmap(w, h, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
System.Drawing.Imaging.BitmapData myData1 = src.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
System.Drawing.Imaging.BitmapData myData2 = bitmap1.LockBits(new Rectangle(0, 0, w, h), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
unsafe{ byte* pIn = (byte*) myData1.Scan0.ToPointer(); byte* pOut = (byte*)myData2.Scan0.ToPointer(); byte* p; int Stride =myData1.Stride; for(int y = 0;y < h ; y ++) { for(int x = 0;x < w; x++) { //边缘8个点像素不变 if(x==0|| x==w-1||y==0||y==h-1) { pOut[0]=pIn[0]; pOut[1]=pIn[1]; pOut[2]=pIn[2]; } else { int r0,r1,r2,r3,r4,r5,r6,r7,r8; int g0,g1,g2,g3,g4,g5,g6,g7,g8; int b0,b1,b2,b3,b4,b5,b6,b7,b8; double vR,vG,vB; //左上 p=pIn-Stride-3; r1=p[2]; g1=p[1]; b1=p[0]; //正上 p=pIn-Stride; r2=p[2]; g2=p[1]; b2=p[0]; //右上 p=pIn-Stride + 3; r3=p[2]; g3=p[1]; b3=p[0]; //左 p=pIn-3; r4=p[2]; g4=p[1]; b4=p[0]; //右 p=pIn+Stride-3; r5=p[2]; g5=p[1]; b5=p[0]; //左下 p=pIn+Stride-3; r6=p[2]; g6=p[1]; b6=p[0]; //正下 p=pIn+Stride; r7=p[2]; g7=p[1]; b7=p[0]; //右下 p=pIn+Stride+3; r8=p[2]; g8=p[1]; b8=p[0]; //中心点 p=pIn; r0=p[2]; g0=p[1]; b0=p[0]; //使用模板 vR = (double) ((r1+r3+r6+r8+2*r2+2*r4+2*r7+2*r5+4*r0)/16); vG = (double) ((g1+g3+g6+g8+2*g2+2*g4+2*g7+2*g5+4*r0)/16); vB = (double) ((b1+b3+b6+b8+2*b2+2*b4+2*b7+2*b5+4*r0)/16); if(vR>0) { vR = Math.Min(255,vR); } else { vR = Math.Max(0,vR); } if(vG>0) { vG=Math.Min(255,vG); } else { vG=Math.Max(0,vG); } if(vB>0) { vB=Math.Min(255,vB); } else { vB=Math.Max(0,vB); } double temp =(vR*19595+vG*38469+vB*7472)/65536; pOut[0]=(byte)temp; pOut[1]=(byte)temp; pOut[2]=(byte)temp; } pIn+=3; pOut+=3; } pIn+=myData1.Stride-w*3; pOut+=myData1.Stride-w*3; } } src.UnlockBits(myData1); bitmap1.UnlockBits(myData2); pictureBox2.Image=bitmap1; } catch { pictureBox2.Image=null; } }
# ## # ```![图片说明](http://img.ask.csdn.net/upload/201604/04/1459776948_516228.png)c#
解决方案
在项目-属性里面勾选允许不安全的程序,然后才能使用unsafe关键字。
解决方案二:
MSDN里有说明,
https://msdn.microsoft.com/zh-cn/library/ct597kb0.aspx
解决方案四:
上面红线的地方就是出错的地方
时间: 2024-09-30 19:19:18