System.Drawing.Image Не содержит определения для «GetPixel», «LockImage» - PullRequest
0 голосов
/ 08 ноября 2011

Я работаю над настройкой контрастности изображения в C #, но получаю сообщение об ошибке:

"System.Drawing.Image Не содержит определения для 'GetPixel', 'LockImage'«

для следующего кода.

 public static Bitmap AdjustContrast(Bitmap OriginalImage, float Value)
        {
            Bitmap NewBitmap = new Bitmap(OriginalImage.Width, OriginalImage.Height);
            BitmapData NewData =
                Image.LockImage(NewBitmap);

            BitmapData OldData = Image.LockImage(OriginalImage);
            int NewPixelSize = Image.GetPixelSize(NewData);
            int OldPixelSize = Image.GetPixelSize(OldData);
            Value = (100.0f + Value) / 100.0f;
            Value *= Value;

            for (int x = 0; x < NewBitmap.Width; ++x)
            {
                for (int y = 0; y < NewBitmap.Height; ++y)
                {
                    Color Pixel = Image.GetPixel(OldData, x, y, OldPixelSize);
                    float Red = Pixel.R / 255.0f;
                    float Green = Pixel.G / 255.0f;
                    float Blue = Pixel.B / 255.0f;
                    Red = (((Red - 0.5f) * Value) + 0.5f) * 255.0f;
                    Green = (((Green - 0.5f) * Value) + 0.5f) * 255.0f;
                    Blue = (((Blue - 0.5f) * Value) + 0.5f) * 255.0f;
                    Image.SetPixel(NewData, x, y,
                      Color.FromArgb(MathHelper.Clamp((int)Red, 255, 0),
                        MathHelper.Clamp((int)Green, 255, 0),
                       MathHelper.Clamp((int)Blue, 255, 0)),
                       NewPixelSize);
                }
            }
            Image.UnlockImage(NewBitmap, NewData);
            Image.UnlockImage(OriginalImage, OldData);
            return NewBitmap;
        }

Любое предложение будет полезным.

1 Ответ

2 голосов
/ 08 ноября 2011

Вы получаете эту ошибку, потому что компилятор видит Image и пытается найти методы GetPixel и LockImage в классе System.Drawing.Image.Эти методы не существуют в этом классе, поэтому вы получаете ошибку.

Похоже, вы получаете код из блога Джеймса Крейга , в частности этой страницы .Внизу своего фрагмента он указывает, что некоторые методы взяты из его служебной библиотеки, и он специально называет LockImage.Если вы еще этого не сделали, загрузите его служебную библиотеку (на странице, на которую я ссылаюсь) есть ссылка, и я думаю, вы найдете этот метод и GetPixel тоже.

Когда вы все-таки воспользуетесь утилитойВ библиотеке обязательно укажите свои пространства имен для устранения неоднозначности классов, найденных в библиотеке утилит, и в стандартных библиотеках Microsoft.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...