Определение цвета пикселя в растровом изображении с использованием C # в приложении WPF - PullRequest
1 голос
/ 24 мая 2010

Единственный способ, который я нашел до сих пор, это System.Drawing.Bitmap.GetPixel(), но у Microsoft есть предупреждения для System.Drawing, которые заставляют меня задуматься, не является ли это «старым способом» сделать это. Есть ли альтернативы?


Вот что Microsoft говорит о пространстве имен System.Drawing. Я также заметил, что сборка System.Drawing не добавлялась автоматически в ссылки при создании нового проекта WPF.

Пространство имен System.Drawing

Пространство имен System.Drawing обеспечивает доступ к основным графическим функциям GDI +. Более расширенные функциональные возможности предоставлены в пространствах имен System.Drawing.Drawing2D, System.Drawing.Imaging и System.Drawing.Text.

Класс Graphics предоставляет методы для рисования на устройстве отображения. Такие классы, как Rectangle и Point, инкапсулируют примитивы GDI +. Класс Pen используется для рисования линий и кривых, а классы, производные от абстрактного класса Brush, используются для заполнения внутренних частей фигур.

Внимание

Классы в пространстве имен System.Drawing не поддерживаются для использования в службе Windows или ASP.NET. Попытка использовать эти классы из одного из этих типов приложений может привести к непредвиденным проблемам, таким как снижение производительности службы и исключения во время выполнения.

- http://msdn.microsoft.com/en-us/library/system.drawing.aspx

Ответы [ 2 ]

3 голосов
/ 24 мая 2010

Вы можете использовать этот код

    public Color GetPixel(BitmapSource bitmap, int x, int y)
    {
        Debug.Assert(bitmap != null);
        Debug.Assert(x >= 0);
        Debug.Assert(y >= 0);
        Debug.Assert(x < bitmap.PixelWidth);
        Debug.Assert(y < bitmap.PixelHeight);
        Debug.Assert(bitmap.Format.BitsPerPixel >= 24);

        CroppedBitmap cb = new CroppedBitmap(bitmap, new Int32Rect(x, y, 1, 1));
        byte[] pixel = new byte[bitmap.Format.BitsPerPixel / 8];
        cb.CopyPixels(pixel, bitmap.Format.BitsPerPixel / 8, 0);
        return Color.FromRgb(pixel[2], pixel[1], pixel[0]);
    }
1 голос
/ 24 мая 2010

См. этот вопрос и лучший ответ для хорошего объяснения. Но чтобы ответить на ваш вопрос, нет ничего плохого или «старого» в использовании метода System.Drawing.Bitmap.GetPixel ().

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