Как мы можем использовать цветовую матрицу только часть изображения, а не целое изображение?

Я знаю использование colormatrix. но эта работа на весь образ. Есть ли способ работать с colormatrix только часть изображения, а не целое изображение.

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

Я работаю с C#.

2 ответа

Если:

  • bitmap1 - это ваше оригинальное растровое изображение,
  • bitmap2 - это новое растровое изображение,
  • новый прямоугольник (100, 50, 20, 20) - это прямоугольник, в который вы хотите внести изменения,
  • yourImageAtributes является объектом ImageAttributes (надеюсь, вы знаете, как его использовать):
Bitmap bitmap2 = новое растровое изображение (bitmap1.Width, bitmap1.Height); 

// копировать bitmap1 в bitmap2  
Graphics.FromImage(bitmap2).DrawImage(bitmap1, 0, 0);

// копировать часть bitmap1 в bitmap2 с вашими собственными атрибутами изображения (ColorMatrix и т. д.) 
Graphics.FromImage(bitmap2).DrawImage(bitmap1, новый прямоугольник (100, 50, 20, 20), 100, 50, 20, 20, GraphicsUnit.Pixel, yourImageAttributes);

Если вам нужна только рамка, вы можете сначала изменить изображение целиком, а затем скопировать прямоугольник оригинального изображения внутрь.

Учитывая, что ColorMatrix работает только для отдельных цветовых векторов / пикселей, "все", что вам нужно сделать, это тщательно выбирать пиксели, чтобы они соответствовали вашим критериям.

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

Другие вопросы по тегам