Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 位图区域已锁定异常_C#_Visual Studio 2010_Image_Visual Studio_Colors - Fatal编程技术网

C# 位图区域已锁定异常

C# 位图区域已锁定异常,c#,visual-studio-2010,image,visual-studio,colors,C#,Visual Studio 2010,Image,Visual Studio,Colors,我正在使用以下代码: internal static Image ColorReplacer(Image Img, Color oldcolor, Color newcolor, int tolerence) { // Gotten From -> Code Project Bitmap bmap = (Bitmap)Img.Clone(); Color c; int iR_Mi

我正在使用以下代码:

internal static Image ColorReplacer(Image Img, Color oldcolor, Color newcolor, int tolerence)
        {
            // Gotten From -> Code Project
            Bitmap bmap = (Bitmap)Img.Clone();
            Color c;
            int iR_Min, iR_Max; int iG_Min, iG_Max; int iB_Min, iB_Max;
            //Defining Tolerance
            //R
            iR_Min = Math.Max((int)oldcolor.R - tolerence, 0);
            iR_Max = Math.Min((int)oldcolor.R + tolerence, 255);
            //G
            iG_Min = Math.Max((int)oldcolor.G - tolerence, 0);
            iG_Max = Math.Min((int)oldcolor.G + tolerence, 255);
            //B
            iB_Min = Math.Max((int)oldcolor.B - tolerence, 0);
            iB_Max = Math.Min((int)oldcolor.B + tolerence, 255);

            for (int x = 0; x < bmap.Width; x++)
            {
                for (int y = 0; y < bmap.Height; y++)
                {
                    c = bmap.GetPixel(x, y);
                    //Determinig Color Match
                    if ((c.R >= iR_Min && c.R <= iR_Max) &&
                        (c.G >= iG_Min && c.G <= iG_Max) &&
                        (c.B >= iB_Min && c.B <= iB_Max)
                       )
                        if (newcolor == Color.Transparent)
                            bmap.SetPixel(x, y, Color.FromArgb(0, newcolor.R, newcolor.G, newcolor.B));
                        else
                            bmap.SetPixel(x, y, Color.FromArgb(c.A, newcolor.R, newcolor.G, newcolor.B));
                }
            }
            return (Image)bmap.Clone();
        }
内部静态图像颜色替换器(图像Img、颜色oldcolor、颜色newcolor、内部公差)
{
//从->代码项目中获取
位图bmap=(位图)Img.Clone();
颜色c;
int iR_Min,iR_Max;int iG_Min,iG_Max;int iB_Min,iB_Max;
//定义公差
//R
iR_Min=Math.Max((int)oldcolor.R-公差,0);
iR_Max=Math.Min((int)oldcolor.R+tolerence,255);
//G
iG_Min=Math.Max((int)oldcolor.G-公差,0);
iG_Max=Math.Min((int)oldcolor.G+容差,255);
//B
iB_Min=Math.Max((int)oldcolor.B-公差,0);
iB_Max=Math.Min((int)oldcolor.B+容差,255);
对于(int x=0;x如果((c.R>=iR\u-Min&&c.R=iG\u-Min&&c.G=iB\u-Min&&c.B我刚刚测试了您的代码,并且代码执行正确(即,我能够在一个图像上多次调用颜色替换程序,每次调用不同的颜色,然后将其绘制到一个窗体上)


能否提供调用ColorReplacer方法的代码示例?

您需要通过锁定和解锁图像数据,按照以下过程更改颜色:


sure.Button1.Image=ColorReplacer(Button1.Image,Color.White,Clr,50);Button1图像是从设计时的文件中“导入”的(不在资源中)。当您再次尝试调用它时,ColorReplacer中的哪一行引发异常?是GetPixel/SetPixel还是克隆?GetPixel()正在引发异常。抱歉-我无法复制错误。我用一个按钮创建了一个表单,每次单击该按钮时,它都会运行“button1.Image=ColorReplacer(…)”正如在您的示例中一样,它一直在工作!您是对的。我是这样做的:处理选项加载选项表单。在选项表单上关闭重新加载/更改颜色。该过程导致了错误,但我仍然对如何修复它有点困惑。