簡體   English   中英

位圖區域已被鎖定異常

[英]Bitmap Region is already locked exception

我正在使用此代碼:

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();
        }

此代碼效果很好。 它成功將我的白色圖標圖像更改為另一種顏色。 問題是:一旦更改,便無法再次更改。 它給我“位圖區域已被鎖定的異常”。 我假設是因為GetPixel()正在鎖定圖像?

有人可以為這個問題提出一個好的解決方案嗎?

PS:我知道GetPixel()是一種非常慢的方法,但是,我使用的是8張圖像,它們均為24px。 它們很小,所以我不認為GetPixel()的性能有什么大問題。

我剛剛測試了您的代碼,它就正確執行了(即,我能夠在具有不同顏色的單個圖像上多次調用ColorReplacer,然后將其繪制到窗體上)。

您能否提供調用ColorReplacer方法的代碼示例?

您需要按照以下過程通過鎖定和解鎖圖像數據來更改顏色:

http://msdn.microsoft.com/zh-CN/library/system.drawing.bitmap.unlockbits.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM