Установите пиксели в растровом файле WPF в C#

В этом примере показано, как вы можете манипулировать пикселями в растровом файле WPF.

Одна из вещей, которые мне меньше всего нравятся в WPF, - это то, как Microsoft отбросила все, что мы узнали за годы работы с Visual Studio. Да, все в порядке, чтобы начать движение в новом направлении, но нет оснований игнорировать уроки, извлеченные через многолетний трудный опыт. Работа с растровыми изображениями является одной из областей, где WPF сделал именно это. Инструменты .NET не очень удобны для манипулирования пикселями изображения, но они лучше, чем один (обратите внимание, что я не говорю «одни»), предоставленные WPF.

В любом случае, чтобы создать растровое изображение в WPF, вы создаете объект WriteableBitmap. Затем вы создаете одномерный массив, содержащий информацию о необработанном пикселе для изображения, и вы используете метод WritePixels растрового изображения для копирования пиксельных данных в изображение. Следующий код показывает, как работает эта программа.

Код начинается с создания WriteableBitmap. Он устанавливает разрешение растрового изображения на 96 пикселей на дюйм и использует формат Bgra32, поэтому растровое изображение использует 32 бита на пиксель для представления информации о синем, зеленом, красном и альфах (непрозрачности).

Обратите внимание на порядок: синий, зеленый, красный, альфа. Это порядок, в котором данные хранятся для каждого пикселя. Вероятно, это не тот порядок, который вы ожидаете.

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

Затем код использует несколько циклов для установки данных байтового пикселя. Сначала он устанавливает цветовые компоненты каждого пикселя в 0 и его альфа-компоненты на 255 (непрозрачный). Затем он использует три петли для создания областей синего, зеленого и красного цветов.

Метод растрового изображения WritePixels ожидает одномерный массив в качестве параметра, поэтому код копирует трехмерные данные в одномерный массив.

Затем программа вызывает метод WritePixels растрового изображения, чтобы скопировать данные пикселов в растровое изображение. Прямоугольник указывает часть обновления растрового изображения. Параметр stride сообщает методу WritePixels, сколько байтов данных есть в строке в растровом изображении. Это просто ширина растрового изображения в пикселях, умноженное на количество байтов на пиксель. Конечным параметром является смещение в массиве в то место, где начинается копирование данных.

В этот момент битмап готов к использованию. Программа создает элемент управления Image, чтобы отобразить его, добавляет Изображение в основной элемент Grid программы и отображает растровое изображение в Изображение свойство source управления.

Источник: http://csharphelper.com/blog/2015/07/set-the-pixels-in-a-wpf-bitmap-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *