В этом уроке я расскажу, как сделать плагин 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
Код: Выделить всё
// 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;
Код: Выделить всё
#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 «Эффекты» - «Color».
Пользовательский интерфейс эффекта paint.net «Установить прозрачность» выглядит так.