Как удалить часть изображения в C#

В этом примере вы можете удалить часть изображения. Он позволяет загружать файл изображения, а затем щелкнуть и перетащить, чтобы выбрать область на изображении. Когда вы отпускаете мышь, программа генерирует два новых изображения: изображение, содержащее только выбранную область, и изображение с выбранной областью. Другие части обоих изображений прозрачны. Затем программа отображает два новых изображения, нарисованных поверх шаблона шахматной доски, чтобы вы могли видеть прозрачные области.

В следующем коде показан метод MakeImageWithArea, который создает изображение, содержащее только выбранную область.

Сначала метод создает новое растровое изображение, которое имеет те же размеры, что и исходное растровое изображение. Он создает объект Graphics, связанный с новым растровым изображением, и использует его для очистки растрового изображения, заполняя его прозрачным цветом.

Далее код создает TextureBrush. A TextureBrush заполняет объекты повторяющимся изображением. В этом случае программа использует исходное растровое изображение как образ кисти. Затем он просто заполняет выбранную область кистью. Затем метод возвращает новое растровое изображение.

Код, создающий изображение с выбранной удаленной областью, немного сложнее. В идеале вы просто начнете с копии оригинального растрового изображения, а затем заполните выбранную область прозрачным цветом. К сожалению, когда вы рисуете, программа накладывает новый цвет поверх существующих цветов изображения. Например, если вы рисуете с 50% непрозрачным цветом, рисованная область только затеняется частично непрозрачным цветом. В этом примере, если вы заполняете область прозрачным цветом, цвет фона отображается так, что область полностью не затронута.

Вы можете заполнить область необычным цветом, а затем использовать метод MakeTransparent растрового изображения, чтобы сделать пиксели с прозрачным цветом. Например, вы можете использовать пурпурный или цвет с компонентами RGB 1, 1, 1 и надеяться, что исходное изображение не содержит пикселов с этим цветом. Тем не менее, всегда есть шанс, что изображение будет содержать этот цвет, а затем программа сделает прозрачные прозрачные пиксели.

В этом примере используется другой подход, который показан в следующем коде.

Этот код создает копию исходного растрового изображения и создает связанный с ним объект Graphics. Затем он создает объект GraphicsPath и добавляет к нему точки выбранной области в виде многоугольника. Он вызывает метод Graphics объекта Graphics, чтобы ограничить операции рисования с помощью GraphicsPath, а затем использует Graphics объект Очистить, чтобы очистить растровое изображение с помощью Прозрачного цвета. Поскольку SetClip ограничивает рисование в выбранной области, это очищает только выбранную область.

После очистки выбранной области код сбрасывает область отсечения растрового изображения и возвращает растровое изображение.

В программе есть еще один интересный фрагмент кода. Метод MakeSampleImage, показанный в следующем коде, принимает растровое изображение в качестве параметра и рисует его поверх шаблона шахматной доски, чтобы вы могли видеть любые прозрачные области изображения.

Сначала метод создает растровое изображение с соответствующим размером и создает связанный объект Graphics. Он очищает растровое изображение белым цветом, а затем использует вложенные петли для рисования синего рисунка шахматной доски.

Затем метод использует метод Graphics объекта GraphicsImageUnscaled для рисования исходного изображения сверху и возвращает результат.

Источник: http://csharphelper.com/blog/2015/04/remove-part-of-an-image-in-c/

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

Add a Comment

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