Предлагаю вашему вниманию еще несколько сценариев встроенных Paint.NET-эффектов, созданных мною по "образцу и подобию" сценариев CodeLab.
Добавление шума
Код: Выделить всё
#region UICode
int Amount1=64; // [0,100] Интенсивность
int Amount2=100; // [0,400] Насыщенность
double Amount3=100; // [0,100] Плотность покрытия
#endregion
// Это основной цикл функции обработки
void Render(Surface dst, Surface src, Rectangle rect)
{
// Настройки вызова эффекта Добавление шума
AddNoiseEffect addNoiseEffect = new AddNoiseEffect();
PropertyCollection addNoiseProps = addNoiseEffect.CreatePropertyCollection();
PropertyBasedEffectConfigToken addNoiseParameters = new PropertyBasedEffectConfigToken(addNoiseProps);
addNoiseParameters.SetPropertyValue(AddNoiseEffect.PropertyNames.Intensity, Amount1);
addNoiseParameters.SetPropertyValue(AddNoiseEffect.PropertyNames.Saturation, Amount2);
addNoiseParameters.SetPropertyValue(AddNoiseEffect.PropertyNames.Coverage, Amount3);
addNoiseEffect.SetRenderInfo(addNoiseParameters, new RenderArgs(dst), new RenderArgs(src));
// Вызов функции Добавление шума
addNoiseEffect.Render(new Rectangle[1] { rect }, 0, 1);
// Теперь в основном цикле обработки холст назначения (dst) имеет зашумленную версию холста источника (src)
for (int y = rect.Top; y < rect.Bottom; y++)
{
if (IsCancelRequested) return;
for (int x = rect.Left; x < rect.Right; x++)
{
ColorBgra CurrentPixel = dst[x,y];
// ВЫПОЛНЕНИЕ: Добавьте здесь дополнительный код обработки пикселов
dst[x,y] = CurrentPixel;
}
}
}
Код: Выделить всё
#region UICode
int Amount1 = 10; // [0,100] Радиус
double Amount2 = 0.4; // [0,1] Интенсивность
#endregion
// Это основной цикл функции обработки
void Render(Surface dst, Surface src, Rectangle rect)
{
// Настройки для вызова эффекта Уменьшение шума
ReduceNoiseEffect noiseEffect = new ReduceNoiseEffect();
PropertyCollection nProps = noiseEffect.CreatePropertyCollection();
PropertyBasedEffectConfigToken nParameters = new PropertyBasedEffectConfigToken(nProps);
nParameters.SetPropertyValue(ReduceNoiseEffect.PropertyNames.Radius, Amount1);
nParameters.SetPropertyValue(ReduceNoiseEffect.PropertyNames.Strength, Amount2);
noiseEffect.SetRenderInfo(nParameters, new RenderArgs(dst), new RenderArgs(src));
// Вызов фкнкции Уменьшение шума
noiseEffect.Render(new Rectangle[1] {rect},0,1);
// Теперь в основном цикле обработки холст назначения (dst) имеет версию холста источника (src) со сниженным шумом
for (int y = rect.Top; y < rect.Bottom; y++)
{
if (IsCancelRequested) return;
for (int x = rect.Left; x < rect.Right; x++)
{
ColorBgra CurrentPixel = dst[x,y];
// ВЫПОЛНЕНИЕ: Добавьте здесь дополнительный код обработки пикселей
dst[x,y] = CurrentPixel;
}
}
}
Код: Выделить всё
#region UICode
int Amount1=10; // [1,200] Радиус
int Amount2=50; // [0,100] Процент
#endregion
// Это основной цикл функции обработки
void Render(Surface dst, Surface src, Rectangle rect)
{
// Настройки вызова эффекта Медиана
MedianEffect medianEffect = new MedianEffect();
PropertyCollection medianProps = medianEffect.CreatePropertyCollection();
PropertyBasedEffectConfigToken medianParameters = new PropertyBasedEffectConfigToken(medianProps);
medianParameters.SetPropertyValue(MedianEffect.PropertyNames.Radius, Amount1);
medianParameters.SetPropertyValue(MedianEffect.PropertyNames.Percentile, Amount2);
medianEffect.SetRenderInfo(medianParameters, new RenderArgs(dst), new RenderArgs(src));
// Вызов функции Медиана
medianEffect.Render(new Rectangle[1] { rect }, 0, 1);
// Теперь в основном цикле обработки холст назначения (dst) имеет зашумленную версию холста источника (src)
for (int y = rect.Top; y < rect.Bottom; y++)
{
if (IsCancelRequested) return;
for (int x = rect.Left; x < rect.Right; x++)
{
ColorBgra CurrentPixel = dst[x,y];
// ВЫПОЛНЕНИЕ: Добавьте здесь дополнительный код обработки пикселов
dst[x,y] = CurrentPixel;
}
}
}
Код: Выделить всё
#region UICode
int Amount1=50; // [0,100] Контуры
int Amount2=50; // [0,100] Использование цветов
#endregion
// Это основной цикл функции обработки
void Render(Surface dst, Surface src, Rectangle rect)
{
// Настройки вызова эффекта Набросок тушью
InkSketchEffect inkSketchEffect = new InkSketchEffect();
PropertyCollection inkSketchProps = inkSketchEffect.CreatePropertyCollection();
PropertyBasedEffectConfigToken inkSketchParameters = new PropertyBasedEffectConfigToken(inkSketchProps);
inkSketchParameters.SetPropertyValue(InkSketchEffect.PropertyNames.InkOutline, Amount1);
inkSketchParameters.SetPropertyValue(InkSketchEffect.PropertyNames.Coloring, Amount2);
inkSketchEffect.SetRenderInfo(inkSketchParameters, new RenderArgs(dst), new RenderArgs(src));
// Вызов функции Набросок тушью
inkSketchEffect.Render(new Rectangle[1] { rect }, 0, 1);
// Теперь в основном цикле обработки холст назначения (dst) имеет версию холста источника (src) с эффектом Набросок тушью
for (int y = rect.Top; y < rect.Bottom; y++)
{
if (IsCancelRequested) return;
for (int x = rect.Left; x < rect.Right; x++)
{
ColorBgra CurrentPixel = dst[x,y];
// ВЫПОЛНЕНИЕ: Добавьте здесь дополнительный код обработки пикселов
dst[x,y] = CurrentPixel;
}
}
}
Код: Выделить всё
#region UICode
int Amount1=6; // [1,100] Радиус
int Amount2=15; // [1,100] Порог
#endregion
// Это основной цикл функции обработки
void Render(Surface dst, Surface src, Rectangle rect)
{
// Настройки вызова эффекта Поверхностное размытие
SurfaceBlurEffect surfaceBlurEffect = new SurfaceBlurEffect();
PropertyCollection surfaceBlurProps = surfaceBlurEffect.CreatePropertyCollection();
PropertyBasedEffectConfigToken surfaceBlurParameters = new PropertyBasedEffectConfigToken(surfaceBlurProps);
surfaceBlurParameters.SetPropertyValue(SurfaceBlurEffect.PropertyName.Radius, Amount1);
surfaceBlurParameters.SetPropertyValue(SurfaceBlurEffect.PropertyName.Threshold, Amount2);
surfaceBlurEffect.SetRenderInfo(surfaceBlurParameters, new RenderArgs(dst), new RenderArgs(src));
// Вызов функции Поверхностное размытие
surfaceBlurEffect.Render(new Rectangle[1] { rect }, 0, 1);
// Теперь в основном цикле обработки холст назначения (dst) имеет размытую версию холста источника (src)
for (int y = rect.Top; y < rect.Bottom; y++)
{
if (IsCancelRequested) return;
for (int x = rect.Left; x < rect.Right; x++)
{
ColorBgra CurrentPixel = dst[x,y];
// ВЫПОЛНЕНИЕ: Добавьте здесь дополнительный код обработки пикселов
dst[x,y] = CurrentPixel;
}
}
}
Код: Выделить всё
#region UICode
double Amount1=3; // [0,200] Максимальный радиус разброса
double Amount2=0; // [0,200] Минимальный радиус разброса
int Amount3=2; // [1,8] Плавность перехода
#endregion
// Это основной цикл функции обработки
void Render(Surface dst, Surface src, Rectangle rect)
{
// Настройки вызова эффекта Иней
FrostedGlassEffect frostedGlassEffect = new FrostedGlassEffect();
PropertyCollection frostedGlassProps = frostedGlassEffect.CreatePropertyCollection();
PropertyBasedEffectConfigToken frostedGlassParameters = new PropertyBasedEffectConfigToken(frostedGlassProps);
frostedGlassParameters.SetPropertyValue(FrostedGlassEffect.PropertyNames.MaxScatterRadius, Amount1);
frostedGlassParameters.SetPropertyValue(FrostedGlassEffect.PropertyNames.MinScatterRadius, Amount2);
frostedGlassParameters.SetPropertyValue(FrostedGlassEffect.PropertyNames.NumSamples, Amount3);
frostedGlassEffect.SetRenderInfo(frostedGlassParameters, new RenderArgs(dst), new RenderArgs(src));
// Вызов функции Иней
frostedGlassEffect.Render(new Rectangle[1] { rect }, 0, 1);
// Теперь в основном цикле обработки холст назначения (dst) имеет версию холста источника (src) с эффектом Иней
for (int y = rect.Top; y < rect.Bottom; y++)
{
if (IsCancelRequested) return;
for (int x = rect.Left; x < rect.Right; x++)
{
ColorBgra CurrentPixel = dst[x,y];
// ВЫПОЛНЕНИЕ: Добавьте здесь дополнительный код обработки пикселов
dst[x,y] = CurrentPixel;
}
}
}
Код: Выделить всё
#region UICode
int Amount1=2; // [1,100] Размер ячейки
#endregion
// Это основной цикл функции обработки
void Render(Surface dst, Surface src, Rectangle rect)
{
// Настройки вызова эффекта Укрупнение пикселов
PixelateEffect pixelateEffect = new PixelateEffect();
PropertyCollection pixelateProps = pixelateEffect.CreatePropertyCollection();
PropertyBasedEffectConfigToken pixelateParameters = new PropertyBasedEffectConfigToken(pixelateProps);
pixelateParameters.SetPropertyValue(PixelateEffect.PropertyNames.CellSize, Amount1);
pixelateEffect.SetRenderInfo(pixelateParameters, new RenderArgs(dst), new RenderArgs(src));
// Вызов функции Укрупнение пикселов
pixelateEffect.Render(new Rectangle[1] { rect }, 0, 1);
// Теперь в основном цикле обработки холст назначения (dst) имеет версию холста источника (src) с эффектом Укрупнение пикселов
for (int y = rect.Top; y < rect.Bottom; y++)
{
if (IsCancelRequested) return;
for (int x = rect.Left; x < rect.Right; x++)
{
ColorBgra CurrentPixel = dst[x,y];
// ВЫПОЛНЕНИЕ: Добавьте здесь дополнительный код обработки пикселов
dst[x,y] = CurrentPixel;
}
}
}
Код: Выделить всё
#region UICode
int Amount1=5; // [1,10] Смягчение
int Amount2=0; // [-20,20] Освещенность
int Amount3=10; // [0,20] Теплота
#endregion
// Это основной цикл функции обработки
void Render(Surface dst, Surface src, Rectangle rect)
{
// Настройки вызова эффекта Портретный
SoftenPortraitEffect softenPortraitEffect = new SoftenPortraitEffect();
PropertyCollection softenPortraitProps = softenPortraitEffect.CreatePropertyCollection();
PropertyBasedEffectConfigToken softenPortraitParameters = new PropertyBasedEffectConfigToken(softenPortraitProps);
softenPortraitParameters.SetPropertyValue(SoftenPortraitEffect.PropertyNames.Softness, Amount1);
softenPortraitParameters.SetPropertyValue(SoftenPortraitEffect.PropertyNames.Lighting, Amount2);
softenPortraitParameters.SetPropertyValue(SoftenPortraitEffect.PropertyNames.Warmth, Amount3);
softenPortraitEffect.SetRenderInfo(softenPortraitParameters, new RenderArgs(dst), new RenderArgs(src));
// Вызов функции Портретный
softenPortraitEffect.Render(new Rectangle[1] { rect }, 0, 1);
// Теперь в основном цикле обработки холст назначения (dst) имеет версию холста источника (src) с эффектом Портретный
for (int y = rect.Top; y < rect.Bottom; y++)
{
if (IsCancelRequested) return;
for (int x = rect.Left; x < rect.Right; x++)
{
ColorBgra CurrentPixel = dst[x,y];
// ВЫПОЛНЕНИЕ: Добавьте здесь дополнительный код обработки пикселов
dst[x,y] = CurrentPixel;
}
}
}
Код: Выделить всё
#region UICode
int Amount1=6; // [1,20] Радиус
int Amount2=10; // [-100,100] Яркость
int Amount3=10; // [-100,100] Контрастность
#endregion
// Это основной цикл функции обработки
void Render(Surface dst, Surface src, Rectangle rect)
{
// Настройки вызова эффекта Свечение
GlowEffect glowEffect = new GlowEffect();
PropertyCollection glowProps = glowEffect.CreatePropertyCollection();
PropertyBasedEffectConfigToken glowParameters = new PropertyBasedEffectConfigToken(glowProps);
glowParameters.SetPropertyValue(GlowEffect.PropertyNames.Radius, Amount1);
glowParameters.SetPropertyValue(GlowEffect.PropertyNames.Brightness, Amount2);
glowParameters.SetPropertyValue(GlowEffect.PropertyNames.Contrast, Amount3);
glowEffect.SetRenderInfo(glowParameters, new RenderArgs(dst), new RenderArgs(src));
// Вызов функции Свечение
glowEffect.Render(new Rectangle[1] { rect }, 0, 1);
// Теперь в основном цикле обработки холст назначения (dst) имеет версию холста источника (src) с эффектом Свечение
for (int y = rect.Top; y < rect.Bottom; y++)
{
if (IsCancelRequested) return;
for (int x = rect.Left; x < rect.Right; x++)
{
ColorBgra CurrentPixel = dst[x,y];
// ВЫПОЛНЕНИЕ: Добавьте здесь дополнительный код обработки пикселов
dst[x,y] = CurrentPixel;
}
}
}
Код: Выделить всё
#region UICode
int Amount1=0; //[-180,180] Оттенок
int Amount2=100; //[0,200] Насыщенность
int Amount3=0; //[-100,100] Осветленность
#endregion
// Настройки использования операций с пикселями
private UnaryPixelOps.HueSaturationLightness saturationOp;
void Render(Surface dst, Surface src, Rectangle rect)
{
for (int y = rect.Top; y < rect.Bottom; y++)
{
if (IsCancelRequested) return;
for (int x = rect.Left; x < rect.Right; x++)
{
ColorBgra CurrentPixel = src[x,y];
// Создание оттенка и насыщенности на основе слайдеров интерфейса UI
saturationOp = new UnaryPixelOps.HueSaturationLightness(Amount1, Amount2, Amount3);
CurrentPixel = saturationOp.Apply(CurrentPixel);
// ВЫПОЛНЕНИЕ: Добавьте здесь код обработки пикселей
dst[x,y] = CurrentPixel;
}
}
}
Код: Выделить всё
#region UICode
int Amount1=4; // [1,200] Радиус
#endregion
// Это основная функция цикла обработки
void Render(Surface dst, Surface src, Rectangle rect)
{
// Настройки для вызова эффекта Несфокусированность
UnfocusEffect unfocusEffect = new UnfocusEffect();
PropertyCollection unfocusProps = unfocusEffect.CreatePropertyCollection();
PropertyBasedEffectConfigToken unfocusParameters = new PropertyBasedEffectConfigToken(unfocusProps);
unfocusParameters.SetPropertyValue(UnfocusEffect.PropertyNames.Radius, Amount1);
unfocusEffect.SetRenderInfo(unfocusParameters, new RenderArgs(dst), new RenderArgs(src));
// Вызов функции Несфокусированность
unfocusEffect.Render(new Rectangle[1] {rect},0,1);
// Теперь в основном цикле обработки холст назначения (dst) имеет размытую версию холста источника (src)
for (int y = rect.Top; y < rect.Bottom; y++)
{
if (IsCancelRequested) return;
for (int x = rect.Left; x < rect.Right; x++)
{
ColorBgra CurrentPixel = dst[x,y];
// ВЫПОЛНЕНИЕ: Добавьте здесь дополнительный код обработки пикселей
dst[x,y] = CurrentPixel;
}
}
}
Код: Выделить всё
#region UICode
int Amount1 = 10; // [0,100] Степень приближения
Pair<double, double> Amount2 = Pair.Create( 0.0 , 0.0 ); // Центр
#endregion
// Это основная функция цикла обработки
void Render(Surface dst, Surface src, Rectangle rect)
{
// Настройки для вызова эффекта Приближение
ZoomBlurEffect zoomBlurEffect = new ZoomBlurEffect();
PropertyCollection zoomBlurProps = zoomBlurEffect.CreatePropertyCollection();
PropertyBasedEffectConfigToken zoomBlurParameters = new PropertyBasedEffectConfigToken(zoomBlurProps);
zoomBlurParameters.SetPropertyValue(ZoomBlurEffect.PropertyNames.Amount, Amount1);
zoomBlurParameters.SetPropertyValue(ZoomBlurEffect.PropertyNames.Offset, Amount2);
zoomBlurEffect.SetRenderInfo(zoomBlurParameters, new RenderArgs(dst), new RenderArgs(src));
// Вызов функции Приближение
zoomBlurEffect.Render(new Rectangle[1] {rect},0,1);
// Теперь в основном цикле обработки холст назначения (dst) имеет размытую версию холста источника (src)
for (int y = rect.Top; y < rect.Bottom; y++)
{
if (IsCancelRequested) return;
for (int x = rect.Left; x < rect.Right; x++)
{
ColorBgra CurrentPixel = dst[x,y];
// ВЫПОЛНЕНИЕ: Добавьте здесь дополнительный код обработки пикселей
dst[x,y] = CurrentPixel;
}
}
}
Код: Выделить всё
#region UICode
int Amount1=2; // [1,20] Величина
#endregion
// Это основной цикл функции обработки
void Render(Surface dst, Surface src, Rectangle rect)
{
// Настройки вызова эффекта Резкость
SharpenEffect sharpenEffect = new SharpenEffect();
PropertyCollection sharpenProps = sharpenEffect.CreatePropertyCollection();
PropertyBasedEffectConfigToken sharpenParameters = new PropertyBasedEffectConfigToken(sharpenProps);
sharpenParameters.SetPropertyValue(SharpenEffect.PropertyNames.Amount, Amount1);
sharpenEffect.SetRenderInfo(sharpenParameters, new RenderArgs(dst), new RenderArgs(src));
// Вызов функции Резкость
sharpenEffect.Render(new Rectangle[1] { rect }, 0, 1);
// Теперь в основном цикле обработки холст назначения (dst) имеет резкостную версию холста источника (src)
for (int y = rect.Top; y < rect.Bottom; y++)
{
if (IsCancelRequested) return;
for (int x = rect.Left; x < rect.Right; x++)
{
ColorBgra CurrentPixel = dst[x,y];
// ВЫПОЛНЕНИЕ: Добавьте здесь дополнительный код обработки пикселов
dst[x,y] = CurrentPixel;
}
}
}