2 qq 20726729 qq_20726729 于 2016.04.04 21:37 提问

c#程序里有个地方出错,提示unsafe使用不正确,(c#)
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#

4个回答

caozhy
caozhy   Ds   Rxr 2016.04.04 22:57

在项目-属性里面勾选允许不安全的程序,然后才能使用unsafe关键字。

qq_20726729
qq_20726729 谢谢!
一年多之前 回复
qingyun524
qingyun524   2016.04.06 17:59
qq_20726729
qq_20726729 谢谢
一年多之前 回复
qq_20726729
qq_20726729   2016.04.04 21:39

图片说明

qq_20726729
qq_20726729 就是红线的地方出错的
一年多之前 回复
qq_20726729
qq_20726729   2016.04.04 21:41

上面红线的地方就是出错的地方

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!