Страница 1 из 1

Плагины от TechnoRobbo

Добавлено: 16 июл 2013, 17:37
xmario
Плагины от TechnoRobbo

На англоязычном форуме появился новый участник с новыми интересными плагинами. О некоторых из них хотелось бы рассказать нашим пользователям. Многие из плагинов особенно понравятся новичкам. С них и начнем.

Layer Cake - Плагин для поворота рисунка по частям

Этот плагин разбивает изображение на окружности и поворачивает каждую из них. С помощью этого плагина можно создавать причудливые узоры и портить фотографии, создавая абстракции. Доступны параметры, влияющие на угол поворота и количество окружностей. Ссылка на страницу англоязычного форума здесь.

После установки плагин доступен в меню "Эффекты" - "Искажения" - "Layer Cake".

Изображение

Автор публикует плагин с открытым кодом (это для тех, кто читал раздел как сделать свой эффект (плагин) для paint.net)

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

// Submenu: Distort
// Name: Layer Cake
// Title: Layer Cake - v1.0
// Author: TechnoRobbo
// URL: http://www.technorobbo
#region UICode
double Amount1 = 1.5;//[-10,10]Rotation
double Amount2 = 5;//[1,30]Slices
#endregion

void Render(Surface dst, Surface src, Rectangle rect)
{
 
    Rectangle selection = EnvironmentParameters.GetSelection(src.Bounds).GetBoundsInt();
    int CenterX = ((selection.Right - selection.Left) / 2)+selection.Left;
    int CenterY = ((selection.Bottom - selection.Top) / 2)+selection.Top;
    double radX = (selection.Right - selection.Left) / 2;
    double radY = (selection.Bottom - selection.Top) / 2;
    double offrads = 0;
    double rads = 0;
    double slices = 0;
    int newx = 0;
    int newy = 0;
    double maxrad = Math.Sqrt(radX * radX + radY * radY);
    ColorBgra CP;
    
    rads=  Math.PI * Amount1;
    
    for (int y = rect.Top; y < rect.Bottom; y++)
    {
        
        for (int x = rect.Left; x < rect.Right; x++)
        {
            
            slices = Math.Sqrt((x-CenterX) * (x-CenterX) + (y-CenterY)* (y-CenterY)) * rads / maxrad;         
            offrads = Math.Truncate(slices / (rads / Amount2)) * (rads / Amount2);

            newx=CenterX + (int)(Math.Cos(offrads) * (x-CenterX) + Math.Sin(offrads) * (y-CenterY));
            newy=CenterY + (int)(Math.Cos(offrads) * (y-CenterY) - Math.Sin(offrads) * (x-CenterX));
            CP = src.GetBilinearSampleWrapped(newx,newy);    

            dst[x,y] = CP;
        }
    }
}

Re: Плагины от TechnoRobbo

Добавлено: 16 июл 2013, 17:49
xmario
TR's Star Filter - Плагин для тех, кто любит делать блестки

Этот плагин разбивает добавляет блестки на изображение или фотографию.

После установки плагин доступен в меню "Эффекты" - "Для фотографий" - "TR's Star Filter".

Изображение

Автор публикует плагин с открытым кодом (это для тех, кто читал раздел как сделать свой эффект (плагин) для paint.net)

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

// Submenu: Photo
// Name: TR's Star Filter
// Title: TR's Star Filter- v1.0
// Author: TechnoRobbo
// URL: http://www.technorobbo

#region UICode
int Amount1 = 200; // [192,255] Threshold
double Amount2 = 30; // [1,150] Diffusion
double Amount3 = 0; // [0,0.25] Rotation
byte Amount4 = 0; // Number of Star Points|4 Points|8 Points|16 Points
#endregion

void Render(Surface dst, Surface src, Rectangle rect)
{
    Rectangle selection = EnvironmentParameters.GetSelection(src.Bounds).GetBoundsInt();
    int CenterX = ((selection.Right - selection.Left) / 2)+selection.Left;
    int CenterY = ((selection.Bottom - selection.Top) / 2)+selection.Top;
    
    int stars = (int)Math.Pow( 2, Amount4 + 2);
    int half = stars/2;
    double[] cosx = new double[stars]; 
    double[] siny = new double[stars]; 
    for (int i=0;i<stars;i++){
        cosx[i] = Math.Cos((double)i * Math.PI / half + Math.PI * Amount3) ;
        siny[i] = Math.Sin((double)i * Math.PI / half + Math.PI * Amount3);
    }
    
    ColorBgra CP;
    ColorBgra CO;
    double mix;
    for (int y = rect.Top; y < rect.Bottom; y++)
    {
        for (int x = rect.Left; x < rect.Right; x++)
        {
            CP = src[x,y];
            bool bo=false;
            for (int i=0 ; i <Amount2 ; i++){
                for (int j=0 ; j < stars ; j++){
                    CO = src.GetBilinearSampleClamped((float)(x + cosx[j] * i), (float)(y + siny[j] * i));
                    double avg=CO.R + CO.G + CO.B;
                    avg /= 3;
                    if (avg >= Amount1){ 
                        mix = Math.Sqrt( i / Amount2);
                        CP.R = Int32Util.ClampToByte((int)(CP.R * mix + CO.R * (1.0f - mix)));
                        CP.G = Int32Util.ClampToByte((int)(CP.G * mix + CO.G * (1.0f - mix)));
                        CP.B = Int32Util.ClampToByte((int)(CP.B * mix + CO.B * (1.0f - mix)));
                               
                        bo=true;
                        break;
                    }
                }// j
                if (bo){break;}
            }// i
            dst[x,y] = CP;
        }
    }
}
Ссылка на страницу англоязычного форума здесь.