Урок №3. Как сделать свой эффект для paint.net

Эта ветка форума посвящена вопросу, как самому сделать свой плагин (эффект) для Paint.NET. Для публикации своих эффектов используйте основной форум "Эффекты и плагины к Paint.NET"
Ответить
Аватара пользователя
xmario
Администратор
Сообщения: 3384
Зарегистрирован: 03 апр 2010, 20:12
Репутация: 32
Пол: Мужской
Откуда: Москва

Урок №3. Как сделать свой эффект для paint.net

Сообщение xmario » 09 июл 2010, 16:03

Как самому сделать плагин paint.net который изменяет прозрачность рисунка.

В этом уроке я расскажу, как сделать плагин paint.net который изменяет прозрачность рисунка.

Сделать такой плагин для paint.net совсем несложно. Но, как ни странно, он иногда оказывается очень полезным. Я сам пользовался им несколько раз. Самое главное, что сделать этот эффект очень просто, так что заодно получается очень простой урок, как создать собственный эффект для paint.net.

Сначала немного теории, может быть, она повторяется в других уроках на эту тему, но это не важно.

Paint.net - это растровый графический редактор. Слово растровый означает, что изображение в paint.net представляет собой совокупность точек – пикселей. Т.е. рисунок или фотография, которую вы видите перед собой, разбита на много маленьких пикселей - точек, каждая из которых имеет свой цвет и прозрачность. Из этих точек-то и складывается изображение.

Т.о. на языке программирования в плагинах paint.net каждая точка определяется координатами X и Y и имеет четыре параметра R, G, B и A. Первые три параметра R, G и B характеризуют три цветовых канала – красный, зеленый и синий из которых складывается цвет. Четвертый параметр A отвечает, как раз, за прозрачность. Минимальное значение этого параметра ноль означает, что точка на рисунке будет абсолютно прозрачной. И наоборот максимальное значение параметра для совершенно непрозрачной точки 255. Именно этот параметр A мы и будем менять с помощью нашего плагина.

Обратите внимание, что из обще известных форматов компьютерный рисунков, прозрачность поддерживают только два – это GIF и PNG. Причем обычный GIF поддерживает только полную прозрачность (только два значения A=0 или A=255), без полупрозрачных пикселей. Т.о. для рисунков с полупрозрачными участками нам остается только PNG. Paint.net умеет сохранять рисунки в формате PNG.

Ну, естественно можно еще сохранять рисунки во внутреннем формате paint.net - PDN. Особенно промежуточные результаты со слоями.

Итак, теперь, когда мы теоретически подкованы, приступим к созданию собственного плагина paint.net. Для создания собственного плагина paint.net используйте CodeLab. Что такое Code Lab для paint.net и как его скачать, можно узнать здесь.

Откройте Code Lab. Диалоговое окно Code Lab при открытии уже содержит учебный скрипт по умолчанию. Его-то мы и будем исправлять. Так выглядит скрипт по умолчанию.

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

#region UICode
int Amount1=0;	//[0,100]Slider 1 Description
int Amount2=0;	//[0,100]Slider 2 Description
int Amount3=0;	//[0,100]Slider 3 Description
#endregion

void Render(Surface dst, Surface src, Rectangle rect)
{
    // Delete any of these lines you don't need
    Rectangle selection = this.EnvironmentParameters.GetSelection(src.Bounds).GetBoundsInt();
    long CenterX = (long)(((selection.Right - selection.Left) / 2)+selection.Left);
    long CenterY = (long)(((selection.Bottom - selection.Top) / 2)+selection.Top);
    ColorBgra PrimaryColor = (ColorBgra)EnvironmentParameters.PrimaryColor;
    ColorBgra SecondaryColor = (ColorBgra)EnvironmentParameters.SecondaryColor;
    int BrushWidth = (int)EnvironmentParameters.BrushWidth;

    ColorBgra CurrentPixel;
    for (int y = rect.Top; y < rect.Bottom; y++)
    {
        for (int x = rect.Left; x < rect.Right; x++)
        {
            CurrentPixel = src[x,y];
            // TODO: Add pixel processing code here
            // Access RGBA values this way, for example:
            // CurrentPixel.R = (byte)PrimaryColor.R;
            // CurrentPixel.G = (byte)PrimaryColor.G;
            // CurrentPixel.B = (byte)PrimaryColor.B;
            // CurrentPixel.A = (byte)PrimaryColor.A;
            dst[x,y] = CurrentPixel;
        }
    }
}
Первые пять строчек скрипта отвечают за параметры пользователя.

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

#region UICode
int Amount1=0;	//[0,100]Slider 1 Description
int Amount2=0;	//[0,100]Slider 2 Description
int Amount3=0;	//[0,100]Slider 3 Description
#endregion
Нам нужен только один параметр – значение прозрачности, которое мы хотим установить. Поэтому вместо этих строк сделаем такие строчки.

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

#region UICode
int Amount1=0;	//[0,255]Значение прозрачности
#endregion
Теперь, собственно, само действие скрипта. В учебном скрипте Code Lab эти строчки закомментированы. Вместо этих строчек:

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

            // TODO: Add pixel processing code here
            // Access RGBA values this way, for example:
            // CurrentPixel.R = (byte)PrimaryColor.R;
            // CurrentPixel.G = (byte)PrimaryColor.G;
            // CurrentPixel.B = (byte)PrimaryColor.B;
            // CurrentPixel.A = (byte)PrimaryColor.A;
Сделаем одну такую строчку:

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

            CurrentPixel.A = (byte)Amount1;
Вот и все. Мы написали код плагина для paint.net. Полный код должен выглядеть так.

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

#region UICode
int Amount1=0;	//[0,255]Значение прозрачности
#endregion

void Render(Surface dst, Surface src, Rectangle rect)
{
    // Delete any of these lines you don't need
    Rectangle selection = this.EnvironmentParameters.GetSelection(src.Bounds).GetBoundsInt();
    long CenterX = (long)(((selection.Right - selection.Left) / 2)+selection.Left);
    long CenterY = (long)(((selection.Bottom - selection.Top) / 2)+selection.Top);
    ColorBgra PrimaryColor = (ColorBgra)EnvironmentParameters.PrimaryColor;
    ColorBgra SecondaryColor = (ColorBgra)EnvironmentParameters.SecondaryColor;
    int BrushWidth = (int)EnvironmentParameters.BrushWidth;

    ColorBgra CurrentPixel;
    for (int y = rect.Top; y < rect.Bottom; y++)
    {
        for (int x = rect.Left; x < rect.Right; x++)
        {
            CurrentPixel = src[x,y];
            CurrentPixel.A = (byte)Amount1;
            dst[x,y] = CurrentPixel;
        }
    }
}
Для тех, кому не охота вникать во все тонкости программирования плагинов для paint.net, готовый эффект из этого урока можно скачать внизу этого сообщения. О том, как установливать плагины для paint.net можно прочитать здесь.

Эффект для paint.net называется «Установить прозрачность» и доступен в меню paint.net «Эффекты» - «Color».

Пользовательский интерфейс эффекта paint.net «Установить прозрачность» выглядит так.

Изображение
Вложения
xmario_alpha.rar
Скачать файл эффекта paint.net «Установить прозрачность»
(4.67 КБ) 695 скачиваний

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

Секретный рисунок в paint.net

Сообщение xmario » 09 июл 2010, 16:07

Как сделать секретный рисунок в paint.net

Еще одно применение этого эффекта paint.net «Установить прозрачность», сделанного нами в этом уроке может заключаться в создании «секретных» рисунков. :implication:

Например, если вы возьмете какую-нибудь картинку или фотографию и примените к ней или к части этой картинки плагин paint.net «Установить прозрачность» и установите прозрачность, равную единице, то эта часть картинки будет не видна – т.е. станет прозрачной.

Вернуть ее назад можно с помощью того же эффекта paint.net «Установить прозрачность» установив значение прозрачности 255.

Т.е. сделанная прозрачной картинка никому не видна. Восстановить исходное изображение могут только те, кто знают секрет. Воспользовавшись редактором paint.net и этим плагином.

Обратите внимание на две тонкости.

Во-первых, прозрачность из общеизвестных форматов поддерживает только формат PNG. Так что сохранять «секретную» картинку надо только в PNG. Если вы сохраните «секретную» картинку, например, в JPG, то вся секретная часть пропадет.

Во-вторых, нельзя устанавливать значение прозрачности 0. Потому что в этом случае PNG в целях уменьшения объема «потеряет» всю информацию о цвете прозрачных пикселей и вся секретная часть опять пропадет. Если установить прозрачность 1, то пикселей все равно будет не особо видно, информация о цвете не потеряется и все получится.

Вот пример. Эта правая часть этой картинки уже сделана «секретной» с помощью плагина paint.net «Установить прозрачность».

Изображение

Если вы скачаете эту картинку и примените к ней плагин paint.net «Установить прозрачность» со значением 255 (сделаете картинку непрозрачной), то увидите это:

Изображение

Ответить

Вернуться в «Как сделать свой эффект (плагин) для Paint.NET»

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

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