Это рабочий проект. Я унаследовал некоторый код, используя SharpDX (уровень DirectX). Одна из моих задач — исправить фрагмент кода, в котором определенные эффекты изображения применяются к геометрической фигуре, содержащей заливку. Если фильтр применяется к самой заливке, она не соответствует краям. Я придумал код для извлечения отрывка с использованием геометрии объекта. По разным причинам они хотят сохранить заливку, существующую за пределами формы (а именно, у нас есть некоторые эффекты искажения, которые вытягивают пиксели за пределы формы), поэтому мне нужно наложить ее на фон. Проблема, с которой я сталкиваюсь, заключается в том, что я получаю эту однопиксельную границу...
Применение фильтра Soft Edge к видимой части
В программе они объединены вместе
Я не могу поделиться значительной частью кода, так как его части являются частными, но маска представляет собой массив байтов. Я строю его, используя следующий код:
SingleChannelBitmap mask = new SingleChannelBitmap(MaxRequiredPixels.Width, MaxRequiredPixels.Height, 255);
mask.FillShape(new RectangleF(new PointF(0,0), mask.Size), this.Geometry, 0);
255 — максимальное значение альфа-канала (прозрачный). Я инвертирую его, чтобы убрать фрагмент с фона. Единственное, о чем я могу думать, это то, что когда я делаю маскировку, она не включает внешний край геометрии. Я собираюсь попытаться расширить маску на один пиксель самым грубым способом (в основном, сканируя и беря все, что имеет прозрачность 0, и добавляя пиксель прозрачности 0 слева, справа, вверх и вниз), но я знаю должно быть более элегантное решение.
Это должно работать и для фильтра скоса 3D Edge, поэтому создание произвольно больших пробелов, вероятно, тоже не сработает для меня.