Russian Qt Forum
Май 02, 2024, 23:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 281 282 [283] 284 285 ... 290
4231  Qt / 2D и 3D графика / Re: Сложить 2 QColor : Январь 27, 2013, 12:38
Чисто с точки зрения техники программирования - удачна ли реализация оператора + для класса QColor? Да, она корректна в том смысле что дает нужный результат, но хорошее ли это "архитектурное" решение? Мне кажется что нет, а Вы как думаете?
Еще раз, мы что обсуждаем "технику" или "архитектуру"?

Это как спросить: А как вам, с точки зрения архитектуры, шипы на балконных ограждениях? Издали смотрятся  очень эффектно, а вот перелазить - больно. Улыбающийся
4232  Qt / Вопросы новичков / Re: extern "C" и создание динамической либы, из книги Шлее : Январь 26, 2013, 14:59
Ну я над этим думал, можно конечно и через char*. Но уверен, должен быть способ для изначального варианта.
Тогда не обращай внимание на варнинг. Улыбающийся
4233  Qt / 2D и 3D графика / Re: Сложить 2 QColor : Январь 26, 2013, 14:48
- (cosmetic) Вместо qBound лучше смотрится qMin
qBound это по сути qMax и qMin.

- (bug) Вы подрезаете альфу ДО деления на нее, а надо после. Напр я складываю белый + черный. Если обе альфы = 255, должен получиться серый
Это спорно. Улыбающийся Возможно это баг именно в вашей модели.

- (performance) пусть один QColor или оба хранятся напр в HSV. Тогда обращение к каждой компоненте вызывает конверсию HSV->RGB, что весьма недешево.
Мы говорим только о:
Цитировать
Складывать ARGB. При переполнении обрезать (клиппить). Словом: ARGB модель

Исправьте пожалуйста, пипл любит текст для copy/paste
Так велком. Улыбающийся

4234  Qt / Вопросы новичков / Re: extern "C" и создание динамической либы, из книги Шлее : Январь 26, 2013, 14:42
Библиотека подключается, но функция которая в библиотеке не выполняется. Помогите разобраться, раз Шлее вместо того что бы просвятить - запутывает новичков  Смеющийся
Боюсь, что имя у этой функции теперь не такое простое. Улыбающийся

Ладно, если хочешь иметь не мангленное имя, то возвращай extern "C" и вместо QString используй char*.
4235  Qt / Вопросы новичков / Re: extern "C" и создание динамической либы, из книги Шлее : Январь 26, 2013, 14:03
Суть проблемы в том, что при компилировании происходит ошибка:
предупреждение: C4190: для "oddUpper" задана С-компоновка, но возвращаемый тип UDT "QString" несовместим с языком Си

Шлее пишет, что при заключении в extern "C {...} компилятор не будет прикреплять информацию о типе к символьной сигнатуре функции. Без этого спецификатора
компилятор может подставить вместо имени функции совсем другое имя, в котором будет закодирована дополнительная информация.
Подскажите как решить это дело Непонимающий
Компилятор тебя предупреждает, что функцию oddUpper ты декларируешь как С-функцию, но в качестве параметра и типа возвращаемого значения указываешь классы. Эта функция oddUpper не сможет работать с объектами классов.

Либо не используй классы для этой функции, либо убери extern "C" и компилятор заманглит имя этой функции.
4236  Qt / 2D и 3D графика / Re: Сложить 2 QColor : Январь 26, 2013, 13:58
Код
C++ (Qt)
static inline qreal c_to_f( int v ) { return qreal( v ) / 255.; }
 
QColor operator+( const QColor &c1, const QColor &c2 )
{
   if( !c1.alpha() && !c2.alpha() )
     return QColor( 0, 0, 0, 0 );
 
   qreal a1 = c_to_f( c1.alpha() );
   qreal a2 = c_to_f( c2.alpha() );
   qreal a = qBound( 0., a1 + a2, 1. );
 
   qreal r = qBound( 0., ( ( c_to_f( c1.red() ) * a1 + c_to_f( c2.red() ) * a2 ) / a, 1. );
   qreal g = qBound( 0., ( ( c_to_f( c1.green() ) * a1 + c_to_f( c2.green() ) * a2 ) / a, 1. );
   qreal b = qBound( 0., ( ( c_to_f( c1.blue() ) * a1 + c_to_f( c2.blue() ) * a2 ) / a, 1. );;
 
   return QColor::fromRgbF( r, g, b, a );
}
 

Писал прямо здесь, могут быть опечатки.

От c_to_f можно отказаться, значения компонентов для вещественных чисел уже возвращаются приведенные к отрезку 0...1.
Код
C++ (Qt)
QColor operator+( const QColor &c1, const QColor &c2 )
{
   if( !c1.alpha() && !c2.alpha() )
     return QColor( 0, 0, 0, 0 );
 
   qreal a1 = c1.alphaF();
   qreal a2 = c2.alphaF();
   qreal a = qBound( 0., a1 + a2, 1. );
 
   qreal r = qBound( 0., ( c1.redF() * a1 + c2.redF() * a2 ) / a, 1. );
   qreal g = qBound( 0., ( c1.greenF() * a1 + c2.greenF() * a2 ) / a, 1. );
   qreal b = qBound( 0., ( c1.blueF() * a1 + c2.blueF() * a2 ) / a, 1. );
 
   return QColor::fromRgbF( r, g, b, a );
}
 
4237  Qt / 2D и 3D графика / Re: Сложить 2 QColor : Январь 26, 2013, 13:36
Такие коллизии надо решать самостоятельно, здесь уже предметная часть здесь ни при чем.
Не в вашем случае... Здесь лучше переспросить. Подмигивающий
4238  Qt / 2D и 3D графика / Re: Сложить 2 QColor : Январь 26, 2013, 13:22
А оператор за Вами
Итоговая альфа?
Для этой формулы есть ограничения: два цвета не могут одновременно иметь alpha = 0. Улыбающийся
4239  Qt / 2D и 3D графика / Re: Сложить 2 QColor : Январь 26, 2013, 13:21
Но, та, конечно, была интересней)) Перечитал бы ещё раз с удовольствием)
Лови: http://www.prog.org.ru/topic_14700_0.html Улыбающийся
4240  Qt / 2D и 3D графика / Re: Сложить 2 QColor : Январь 26, 2013, 13:12
Не, не.. я лучше понаблюдаю)
Я тоже. Улыбающийся
4241  Qt / 2D и 3D графика / Re: Сложить 2 QColor : Январь 26, 2013, 13:11
Ну интересно, а мне кто ее даст? Улыбающийся  А проверить можем
Что проверить? Давайте математику.
А если у вас ее нет, то почему вы решили, что она есть у разработчиков Qt или вообще есть?
Как это делает фотошоп, нужно спрашивать у его разработчиков. Как это сделано в gimp можно посмотреть в его исходниках, но я сильно сомневаюсь что это одинаковые алгоритмы.
4242  Qt / 2D и 3D графика / Re: Сложить 2 QColor : Январь 26, 2013, 12:49
Я намекаю что если проверить предложенный оператор на 2 цветах - получите чепуху
Дайте формула абсолютного топлива для расчета суммы цветов, будем проверять. Улыбающийся
4243  Qt / 2D и 3D графика / Re: Сложить 2 QColor : Январь 26, 2013, 12:36
Вот оказывается как все просто! А сомнений у Вас никаких не возникает?  Улыбающийся
У меня вообще возникает сомнение в целесообразности "складывания цветов". Улыбающийся
4244  Qt / 2D и 3D графика / Re: Сложить 2 QColor : Январь 26, 2013, 12:29
Альфа выходного цвета должна быть равна сумме альф слагаемых.
Код
C++ (Qt)
QColor operator+( const QColor &a, const &b )
{
   return QColor( qBound( 0, a.red() + b.red(), 255 ), qBound( 0, a.green() + b.green(), 255 ), qBound( 0, a.blue() + b.blue(), 255 ), qBound( 0, a.alpha() + b.alpha(), 255 ) );
}
 
4245  Qt / 2D и 3D графика / Re: Сложить 2 QColor : Январь 26, 2013, 12:21
Прошу исполнить  Улыбающийся
Код
C++ (Qt)
QColor operator+( const QColor &a, const &b )
{
   return QColor( qBound( 0, a.red() + b.red(), 255 ), qBound( 0, a.green() + b.green(), 255 ), qBound( 0, a.blue() + b.blue(), 255 ) );
}
 

Что делать с альфой пока не знаю, если вы мне скажете какая она должна быть для "вашей суммы цветов", то я ее обязательно учту. Улыбающийся
Страниц: 1 ... 281 282 [283] 284 285 ... 290

Страница сгенерирована за 0.133 секунд. Запросов: 23.