Примеры сценариев встроенных Paint.NET эффектов для CodeLab

Эта ветка форума посвящена инструкции по работе с лабораторией скриптов CodeLab от BoltBait. С её помощью можно делать свои плагины для Paint.NET. Все вопросы по CodeLab размещаются здесь.
Ответить
ReMake
Сообщения: 344
Зарегистрирован: 10 сен 2014, 01:25
Репутация: 108
Пол: Мужской
Откуда: Брест, Беларусь

Примеры сценариев встроенных Paint.NET эффектов для CodeLab

Сообщение ReMake » 19 апр 2015, 21:12

BoltBait в плагине CodeLab разместил несколько сценариев эффектов, встроенных в Paint.NET.
Предлагаю вашему вниманию еще несколько сценариев встроенных 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;
        }
    }
}
Надеюсь эти сценарии окажутся полезными для вас.

ReMake
Сообщения: 344
Зарегистрирован: 10 сен 2014, 01:25
Репутация: 108
Пол: Мужской
Откуда: Брест, Беларусь

Re: Примеры сценариев встроенных Paint.NET эффектов для CodeLab

Сообщение ReMake » 12 дек 2015, 22:40

Возможно вам в ваших эффектах понадобится применение встроенного эффекта Поворот и масштаб (меню Слои -> Поворот и масштаб). Предлагаю сценарий этого эффекта. Сценарий приведен применительно к CodeLab версии 2.10.

Поворот и масштаб

Код: Выделить всё

#region UICode
RollControl Amount1 = Tuple.Create<double, double, double>( 0.0 , 0.0 , 0.0 ); // Поворот
PanSliderControl Amount2 = Pair.Create( 0.0 , 0.0 ); // Смещение
DoubleSliderControl Amount3 = 1; // [0.06,16] Масштаб
CheckboxControl Amount4 = false; // [0,1] Мозаика
CheckboxControl Amount5 = false; // [0,1] Сохранить фон
#endregion

// Это основной цикл функции обработки
void Render(Surface dst, Surface src, Rectangle rect)
{
    // Настройки вызова эффекта Поворот и масштаб
    RotateZoomEffect rotatezoomEffect = new RotateZoomEffect();
    PropertyCollection rotatezoomProps = rotatezoomEffect.CreatePropertyCollection();
    PropertyBasedEffectConfigToken rotatezoomParams = new PropertyBasedEffectConfigToken(rotatezoomProps);
    rotatezoomParams.SetPropertyValue(RotateZoomEffect.PropertyNames.RollAndRotate, Amount1);
    rotatezoomParams.SetPropertyValue(RotateZoomEffect.PropertyNames.Offset, Amount2);
    rotatezoomParams.SetPropertyValue(RotateZoomEffect.PropertyNames.Zoom, Amount3);
    rotatezoomParams.SetPropertyValue(RotateZoomEffect.PropertyNames.Tiling, Amount4);
    rotatezoomParams.SetPropertyValue(RotateZoomEffect.PropertyNames.PreserveBackground, Amount5);
    rotatezoomEffect.SetRenderInfo(rotatezoomParams, new RenderArgs(dst), new RenderArgs(src));
    // Вызов функции Поворот и масштаб
    rotatezoomEffect.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;
        }
    }
}

ReMake
Сообщения: 344
Зарегистрирован: 10 сен 2014, 01:25
Репутация: 108
Пол: Мужской
Откуда: Брест, Беларусь

Re: Примеры сценариев встроенных Paint.NET эффектов для CodeLab

Сообщение ReMake » 10 окт 2016, 20:37

В первое сообщение добавлены сценарии встроенных Paint.NET-эффектов 'Несфокусированность', 'Приближение' и 'Резкость'.

Аватара пользователя
xmario
Администратор
Сообщения: 3402
Зарегистрирован: 03 апр 2010, 20:12
Репутация: 45
Пол: Мужской
Откуда: Москва

Re: Примеры сценариев встроенных Paint.NET эффектов для CodeLab

Сообщение xmario » 14 окт 2016, 11:00

Отличная вещь! Правда, я так понимаю, что речь идет про вызовы существующих эффектов, это не их алгоритм, к сожалению, а так было бы интересно узнать, как они устроены. ;)

ReMake
Сообщения: 344
Зарегистрирован: 10 сен 2014, 01:25
Репутация: 108
Пол: Мужской
Откуда: Брест, Беларусь

Re: Примеры сценариев встроенных Paint.NET эффектов для CodeLab

Сообщение ReMake » 15 окт 2016, 16:46

Узнать не проблема, ILSpy и JetBrains dotPeek 10 помогут заглянуть внутрь эффекта и даже создать проект для VisualStudio (в dotPeek 10).

Аватара пользователя
xmario
Администратор
Сообщения: 3402
Зарегистрирован: 03 апр 2010, 20:12
Репутация: 45
Пол: Мужской
Откуда: Москва

Re: Примеры сценариев встроенных Paint.NET эффектов для CodeLab

Сообщение xmario » 17 окт 2016, 10:24

Не очень верю в декомпиляторы, но можно будет попробовать.

ReMake
Сообщения: 344
Зарегистрирован: 10 сен 2014, 01:25
Репутация: 108
Пол: Мужской
Откуда: Брест, Беларусь

Re: Примеры сценариев встроенных Paint.NET эффектов для CodeLab

Сообщение ReMake » 17 окт 2016, 20:22

Декомпиляторы не панацея, их использование потребует значительных усилий (и знаний основ С#), однако применяя оба декомпилятора можно прочитать алгоритм некоторых эффектов, как встроенных, так и разработанных сторонними авторами. Кстати, при помощи dotPeek 10 мне удалось успешно декомпилировать некоторые эффекты MadJik'а, Cookies и pyrochild'а (еще до официальной публикации его исходных кодов).

Ответить

Вернуться в «CodeLab от BoltBait»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость