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

Изменение прозрачности

Добавлено: 11 июл 2010, 16:55
xmario
Эффект для paint.net для изменения прозрачности изображения

Эффект paint.net для изменения уровня прозрачности изображения.

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

Изображение

Два основных верхних параметра определяют два способа изменения прозрачности.

Параметр "Умножить на коэффициент" задает коэффициент на который будет умножено значение прозрачности (альфа) у всех пикселей изображения. Если значение этого параметра меньше 1, то прозрачность на изображении будет уменьшена. Если значение параметра больше 1, то уровень прозрачности будет увеличен. Значение этого параметра по умолчанию равно 1, т.е. ничего не происходит.

Параметр "Увеличить на" определяет число которое будет прибавлено к текущему уровню прозрачности пикселей на изображении. Если значение этого параметра положительное, то уровень прозрачности увеличится. Если значение отрицательное, то прозрачность у всех точек изображения уменьшится на это число. Значение этого параметра по умолчанию равно 0, т.е. ничего не происходит.

Галочка - "Прозрачность по черно-белому рисунку" позволяет перевести изображение в один цвет с разным уровнем прозрачности. Т.е. если у вас есть цветное или черно-белое изображение, то после применения этого эффекта оно станет нарисованным одним цветом. Темные участки изображения будут более прозрачными, а светлые участки менее прозрачными. В качестве цвета используется цвет, выбранный дополнительным в палитре цветов paint.net. Почему дополнительный, а не основной? Потому, что мне показалось более логичным делать белые рисунки, а белый цвет по умолчанию установлен в палитре paint.net как дополнительный.

Несколько примеров применения эффектов.

Используем для примера вот такую исходную фотографию.

Изображение

Если создать новый слой, заполнить его черным цветом, а потом применить к слою с фотографией эффект "Изменить прозрачность" с включенной галочкой "Прозрачность по черно-белому рисунку". То получится вот такой рисунок. Вам кажется, что рисунок просто стал черно-белым? Нет! Попробуйте изменить черный цвет на слое ниже на какой-нибудь другой. ;)

Изображение

Для большей наглядности на рисунке ниже можно увидеть, что будет, если вместо черного слоя поместить исходную фотографию.

Изображение

А вот такой результат получится у плагина "Изменение прозрачности", если дополнительно воспользоваться параметрами изменения прозрачности, здесь коэффициент ~2, а второй параметр отрицательный.

Изображение

Исходный код эффекта Изменение прозрачности

Добавлено: 11 июл 2010, 16:57
xmario
Для тех, кому интересно, ниже привожу исходный код эффекта paint.net "Изменение прозрачности" для CodeLab.

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

#region UICode
double Amount1 = 1; // [0,50] Умножить на коэффициент
int Amount2 = 0; // [-100,100] Увеличить на
bool Amount3 = false; // [0,1] Прозрачность по черно-белому рисунку
#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();
    ColorBgra SecondaryColor = (ColorBgra)EnvironmentParameters.SecondaryColor;

    ColorBgra CurrentPixel;
    for (int y = rect.Top; y < rect.Bottom; y++)
    {
        for (int x = rect.Left; x < rect.Right; x++)
        {
            CurrentPixel = src[x,y];
            if (CurrentPixel.A > 0)
            {
               if (Amount3 == true)
               { 
                   CurrentPixel.A = (byte)(int)((CurrentPixel.R+CurrentPixel.G+CurrentPixel.B)/3);
                   CurrentPixel.R = (byte)SecondaryColor.R;
                   CurrentPixel.G = (byte)SecondaryColor.G;
                   CurrentPixel.B = (byte)SecondaryColor.B;
               } 
               int alpha = CurrentPixel.A;
               alpha = (int)(CurrentPixel.A*Amount1 + Amount2);
               if (alpha > 255) {alpha = 255;}
               if (alpha < 0) {alpha = 0;}
               CurrentPixel.A = (byte) alpha; 
            }
            dst[x,y] = CurrentPixel;
        }
    }
}

Re: Изменение прозрачности

Добавлено: 15 ноя 2014, 15:02
Schumi
Ох, спасибо тебе добрый человек. Хороший плагин.