Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 [2]  Все   Вниз
  Печать  
Автор Тема: Подскажите куда копать.  (Прочитано 52303 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #30 : 02-02-2017 15:45 » 

Готовый плагин не так интересен, как его внутренняя реализация. Впрочем, Вы бы могли представить результат его работы на примере изображения из рабочего задания: картинка до, картинка после.
Записан
PapooAss
Интересующийся

ru
Offline Offline

« Ответ #31 : 02-02-2017 18:40 » 

Готовый плагин не так интересен, как его внутренняя реализация. Впрочем, Вы бы могли представить результат его работы на примере изображения из рабочего задания: картинка до, картинка после.
Я предложил готовый плагин лишь потому, что в теме участвовали люди, которые программируют на С/С++ и др. языках в полноценном смысле. одним словом-знающие.
А модуль CodeLab, собственно на чем и была реализована задача, никто даже не упомянул.
Тем не менее я готов поделиться, может кому пригодится...

Код:
// Name: Edge 4.0
// Submenu: Advanced
// Author: PapooAss
// Title: Edge 4.0
// Version: 4.0
// Desc:
// Keywords:
// URL:
// Help:
#region UICode
IntSliderControl Amount1 = 0; // [-100,100] Голубой-Красный
IntSliderControl Amount2 = 0; // [-100,100] Пурпурный-Зеленый
IntSliderControl Amount3 = 0; // [-100,100] Желтый-Синий
#endregion

private byte Clamp2Byte(int iValue) //процедура , которая возвращает "0" если получается отрицательное значение переменной и "255" если больше 255
{
    if (iValue<0) return 0;
    if (iValue>255) return 255;
    return (byte)iValue;
}//взята из Урока
    
    
void Render(Surface dst, Surface src, Rectangle rect)
{
    ColorBgra CurrentPixel;
    ColorBgra VerifyPixel;
    int R,G,B;
    int Rv, Gv, Bv;
    
    for (int y = rect.Top; y < rect.Bottom; y++)
    {
        if (IsCancelRequested) return;
        for (int x = rect.Left; x < (rect.Right - 1); x++) //стандартный перебор -1 по координатам Х
        {
            CurrentPixel = src[x,y]; //присвоили переменной CurrentPixel текущий пиксель [x,y]
            VerifyPixel = src[(x+1),y]; //присвоили переменной VerifyPixel текущий пиксель [x+1,y]
           if (CurrentPixel.Bgra != VerifyPixel.Bgra) //сравниваем эти переменные. (!=)-означает НЕ равно
           {
               // сдвиг гаммы цвета основного пикселя
               R = (int)CurrentPixel.R;
               G = (int)CurrentPixel.G;
               B = (int)CurrentPixel.B;
              
               R = R + Amount1;
               G = G -(Amount1 / 2);
               B = B -(Amount1 / 2);
              
               G = G + Amount2;
               R = R - (Amount2 / 2);
               B = B - (Amount2 / 2);
              
               B = B + Amount3;
               R = R - (Amount3 / 2);
               G = G - (Amount3 / 2);
              
               // сдвиг гаммы цвета вспомогательного пикселя
               Rv = (int)VerifyPixel.R;
               Gv = (int)VerifyPixel.G;
               Bv = (int)VerifyPixel.B;
              
               Rv = Rv + Amount1;
               Gv = Gv -(Amount1 / 2);
               Bv = Bv -(Amount1 / 2);
              
               Gv = Gv + Amount2;
               Rv = Rv - (Amount2 / 2);
               Bv = Bv - (Amount2 / 2);
              
               Bv = Bv + Amount3;
               Rv = Rv - (Amount3 / 2);
               Gv = Gv - (Amount3 / 2);
              
               // Собираем цвет заново по каналам  R, G, and B с привлечением процедуры Clamp2Byte
                CurrentPixel = ColorBgra.FromBgra(Clamp2Byte(B),Clamp2Byte(G),Clamp2Byte(R),CurrentPixel.A);
                VerifyPixel = ColorBgra.FromBgra(Clamp2Byte(Bv),Clamp2Byte(Gv),Clamp2Byte(Rv),CurrentPixel.A);
           dst[x,y] = CurrentPixel; //Записали собранный пиксель по координатам [x,y]
           dst[(x+1),y] = VerifyPixel; //записали собранный пиксель по координатам [x+1,y]
           }
         }
    }
}

Картинка ДО



Картинка ПОСЛЕ

« Последнее редактирование: 02-02-2017 19:39 от PapooAss » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #32 : 03-02-2017 05:07 » 

PapooAss, мануал по созданию плагина к Paint.Net в студию, вдруг пригодится Отлично
Записан

PapooAss
Интересующийся

ru
Offline Offline

« Ответ #33 : 03-02-2017 06:39 » 

PapooAss, мануал по созданию плагина к Paint.Net в студию, вдруг пригодится Отлично
О! Этому посвящена целая ветка форума! http://paint-net.ru/forum/viewforum.php?f=5&sid=8ead4024d9b6a0d5c47d388ee1cb927d

Ну и чтобы долго там не искать-вот ссыль на скачивание мануала на русском:
https://cloud.mail.ru/public/93mz/fK4bPApHj
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #34 : 04-02-2017 07:44 » new

PapooAss, спасибо, на досуге полистаю форум.

Вторая ссылка бесполезная, там явно не хватает файлов )
Записан

Страниц: 1 [2]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines