Это рабочий проект. Я унаследовал некоторый код, используя SharpDX (уровень DirectX). Одна из моих задач - исправить часть кода, где определенные эффекты изображения применяются к геометрической форме, содержащей заливку. Если фильтр применяется к самому заполнению, он не соответствует краям. Я вычислил код, чтобы вытащить выдержку, используя Геометрию объекта. По разным причинам они хотят сохранить заливку, которая существует вне формы (а именно, мы имеем некоторые эффекты искажения, которые вытягивают пиксели за пределами формы), поэтому мне нужно наложить их поверх фона. Проблема я бегу в том, что я получаю этот один пиксель границу ...Устранение эффекта границы
Применение мягкого фильтра Грань видимой части
Два скомпонованных вместе в программе
То, что я на самом деле получить
я не могу разделить хороший бит кода, из-за части он является собственностью, но маска массив байтов. Я строю его, используя следующий код:
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, поэтому сделать сколь угодно большие пробелы, вероятно, тоже не сработает.
Это слишком непонятно, что вы делаете. Если вы не можете включить код, то, может быть, формальное описание ваших операций? –