c#程序里有个地方出错,提示unsafe使用不正确,(c#)

问题描述

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

c#程序里有个地方出错,提示unsafe使用不正确,(c#)的相关文章

VS2008编译的程序在某些机器上运行提示“由于应用程序配置不正确,应用程序未能启动”的问题

  使用VS2008编译了一个程序,使用到自己编译的DLL,丢到某些机子上无法运行,提示"由于应用程序配置不正确,应用程序未能启动"的错误,装了vcredist_x86也没有用,开始以为是DLL的问题,后来换个简单的程序,仍然不行,百撕不得其解,后来上网找,下面有说了很多解决办法.         我最终的解决办法是复制本机中的.manifest文件,修改里面的版本号,复制到提示错误的机子上,与可执行程序放在同一目录就可以了.在计算机中管理的系统工具,事件查看器可以查看应用程序的消息,

c++-各位大虾, 我想在程序里监视系统上运行的某些程序运行过程中是否报错异常,能实现吗? 怎么实现?

问题描述 各位大虾, 我想在程序里监视系统上运行的某些程序运行过程中是否报错异常,能实现吗? 怎么实现? 对于程序运行过程中卡死已经能检测,但是对于一些弹框类的运行出错却不知道怎么检测,请各位大虾指点迷津; 现在没有C币,如果回答是我想要的,我花钱补上 解决方案 这不就是编写一个华医生么(注:华医生是微软系统上负责处理应用程序崩溃的程序,就是你图上的"xxx已停止工作,Windows正在联机查找解决方案"),这是一个应用程序,是在用户模式下实现的,而并非在内核中实现,其实华医生也可以卸

用javascript写的字符串加密程序,用if判断程序正常,用switch出错

问题描述 用javascript写的字符串加密程序,用if判断程序正常,用switch出错 大家好,这段代码实现这样的功能: 1.用户输入全是小写字母的字符串,不支持空格和标点符号: 2.程序将字符串中的每个字母,按字母表顺序,向后移动5位,并输出新字符串: <script type="text/javascript"> var str=prompt("请输入要加密的字符串:").split(""); var newStr=[]; v

程序保存在什么地方

程序运行时,我们最好对数据保存到什么地方做到心中有数.特别要注意的是内存的分配.有六个地方都可以保存数据: (1) 寄存器.这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部.然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配.我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹. (2) 堆栈.驻留于常规RAM(随机访问存储器)区域,但可通过它的"堆栈指针"获得处理的直接支持.堆栈指针若向下移,会创建新的内存:若向上移,则会释放那些内

win7升级win10系统出错提示错误代码0x800704c7如何解决

  修复步骤: 1.按Windows+R 输入services.msc打开 找到Windows Update停止; 2.打开此电脑C盘:WindowsSoftwareDistribution当中Download和DataStrre进行删除; 3.按照1的步骤启动Windows Update; 4.点击Windows+x打开任务管理器,点击启动.以上的程序全部禁用; 5.然后重启电脑 上述教程内容就是win7升级win10系统出错提示错误代码0x800704c7的解决方法,升级过程中出现问题属于常

GhostWin7系统安装时出错提示a destination volum如何解决?

GhostWin7系统安装时出错提示a destination volum如何解决? 虽然安装系统并不是什么难事,但在安装过程中难免会遇到一些故障错误问题.最近有用户在选择Ghostwin7系统安装时出错,并弹出英文错误提示"a destination volume could not be locked (641)"(如图所示)导致无法完成安装win7操作系统,那么出现这种故障现象又该如何解决呢?一起来看看系统安装出错的解决方案吧. 1.首先把其他运行的程序全部关闭,由于有可能是其他

Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法

转自 http://www.cnblogs.com/babycool/archive/2011/11/17/2253349.html Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法  最近几天从网上找了几个asp.net的登录案例想要研究研究代码,结果在用 Sql Server2005附加数据库文件时弹出错误信息:如下图:       ,一时无解,遂求助于百度谷歌,经过各种试验,特将解决办法整理于此,希望能帮到大家,同时如果有好的意见大家多多交流啊

c语言-定义数组的初始值为0,结果在程序里涉及到了除法。

问题描述 定义数组的初始值为0,结果在程序里涉及到了除法. 定义数组的初始值为0,结果在程序里涉及到了除法,但是由于有判断,所以不会出现0做除数的问题,可是电脑可能认为我的程序会出现这种问题,然后就说程序错误,不让我执行,应该怎么办 解决方案 电脑怎么判断你除0了的,不应该会让你程序出错的 解决方案二: 不会,这是运行时错误,编译时不会判断的 解决方案三: 你用的什么编译器?一些编译器可能有编译期间的检查,你直接写 1/ 0作为表达式,因为编译器会在编译的时候试图替换成常量,因此会报错. 解决方

启动tomcat时出错,提示windows找不到文件'Djava.endorsed.dirs='

问题描述 启动tomcat时出错,提示windows找不到文件'Djava.endorsed.dirs=' 解决方案 解决方案二:打开%Tomcat_Home%/bin/startup.bat和%Tomcat_Home%/bin/catalina.bat,增加echo输出信息,判断出错地方,再进行相应处理即可.