Russian Qt Forum
Ноябрь 23, 2024, 08:29
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
2D и 3D графика
>
Сложить 2 QColor
Страниц:
1
2
[
3
]
4
5
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Сложить 2 QColor (Прочитано 27031 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сложить 2 QColor
«
Ответ #30 :
Январь 26, 2013, 16:04 »
2m_ax
Пусть напр с1.alpha != 0, с2.alpha == 0. Тогда результат должен быть равен с1 (полностью прозрачное изображение ничего не меняет). А у Вас x != 0, значит с2.red (green, blue) что-то вносят в результат. А альфу Вы чего-то вообще осреднили, это не есть аддитивный эффект/сложение.
Цитата: Old от Январь 26, 2013, 14:48
Цитата: Igors от Январь 26, 2013, 14:42
- (bug) Вы подрезаете альфу ДО деления на нее, а надо после. Напр я складываю белый + черный. Если обе альфы = 255, должен получиться серый
Это спорно.
Возможно это баг именно в вашей модели.
Не спорно, а я ошибся. Белый + черный = белый, ведь мы хотим сумму. У Вас правильно, беру свои слова взад
Теперь немного о другом. Не кажется ли Вам, что что-то идет не так? Вроде и формулка простейшая, а реализация чего-то развесистая, да еще и скрытая подлянка с производительностью. Если рассматривать более сложные операции (где участвуют 3-4 цвета), то это станет невыносимо. В чем причина?
Записан
Bepec
Гость
Re: Сложить 2 QColor
«
Ответ #31 :
Январь 26, 2013, 19:54 »
Причина в том же, в чем причина работы с музыкой - специфика. И без опыта и использования выверенных формул и алгоритмов нужно доходить до желанного результата самому очень долго
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Сложить 2 QColor
«
Ответ #32 :
Январь 26, 2013, 20:30 »
Цитата: Igors от Январь 26, 2013, 16:04
Теперь немного о другом. Не кажется ли Вам, что что-то идет не так? Вроде и формулка простейшая, а реализация чего-то развесистая, да еще и скрытая подлянка с производительностью. Если рассматривать более сложные операции (где участвуют 3-4 цвета), то это станет невыносимо. В чем причина?
Да причина проста, об этом уже тож много говорили.. Конечный результат (вернее его качество) будет напрямую зависеть от постановки задачи.. Если задача плохо поставлена, или вообще не поставлена (корректно) то львиная часть времени будет просто в пустую утекать на её доопределения и выяснения что же всё-таки хотел постановщик этой задачи) Что, кстатии, весьма часто и происходит... за примерами далеко ходить не надо)
Это во-первых..
А во-вторых есть ещё такой момент который, пожалуй, является следствием первого: решения, направленные (и сформулированные) на написание костылей, дабы залатать дыры изначально нелепой архитектуры, как правило, и вызывают ту невыносимость и отторжение)
Есть такая шутка у теоретиков: если вы не можете объяснить вашу теорию доступно своей жене, то это теория скорее всего неправильная)
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сложить 2 QColor
«
Ответ #33 :
Январь 27, 2013, 12:25 »
Цитата: m_ax от Январь 26, 2013, 20:30
Конечный результат (вернее его качество) будет напрямую зависеть от постановки задачи..
Помилуйте, какая "задача/постановка"? Вам что, неизвестно что такое альфа-канал?
visible_red = color.red * color.alpha // premultiply - видимый красный цвет
result.red = visible_red / result.alpha; // un-premultiply - обратная операция, видимый в Red с учетом альфы
Вот и все
Но я хотел поговорить не об этом. Чисто с точки зрения техники программирования - удачна ли реализация оператора + для класса QColor? Да, она корректна в том смысле что дает нужный результат, но хорошее ли это "архитектурное" решение? Мне кажется что нет, а Вы как думаете?
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Сложить 2 QColor
«
Ответ #34 :
Январь 27, 2013, 12:38 »
Цитата: Igors от Январь 27, 2013, 12:25
Чисто
с точки зрения техники программирования
- удачна ли реализация оператора + для класса QColor? Да, она корректна в том смысле что дает нужный результат, но хорошее ли это
"архитектурное" решение
? Мне кажется что нет, а Вы как думаете?
Еще раз, мы что обсуждаем "технику" или "архитектуру"?
Это как спросить: А как вам, с точки зрения архитектуры, шипы на балконных ограждениях? Издали смотрятся очень эффектно, а вот перелазить - больно.
Записан
Bepec
Гость
Re: Сложить 2 QColor
«
Ответ #35 :
Январь 27, 2013, 12:45 »
Уже традиция Igors - задача без поставленной цели.
Сделайте мне ээ.. машину...
Сделали. А почему она трехколёсная, надо ж было на антигравитационной тяге.
Сделали. А почему у неё нет багажника на 15 тонн?
Сделали. А почему она не вписывается в дизайн и стилистику 90-х годов?
Сделали. А почему в ней используются новые НА-НА-технологии?
Сделали на дровах. Она же убивает окружающую среду - деревья рубим и дымим - а не пошёл бы ты, заказчик в баню
PS После этого тема хиреет и умирает
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сложить 2 QColor
«
Ответ #36 :
Январь 27, 2013, 13:01 »
Цитата: Old от Январь 27, 2013, 12:38
Еще раз, мы что обсуждаем "технику" или "архитектуру"?
Обсуждаем насколько хорош (или плох) оператор + для QColor. К чему это отнести - технике или архитектуре - на Ваш вкус.
Цитата: Bepec от Январь 27, 2013, 12:45
Сделайте мне ээ.. машину...
Сделали. А почему она трехколёсная, надо ж было ..
...
Так ведь именно так все и происходит в реальной задаче
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Сложить 2 QColor
«
Ответ #37 :
Январь 27, 2013, 13:06 »
Цитата: Igors от Январь 27, 2013, 13:01
Обсуждаем насколько хорош (или плох) оператор + для QColor. К чему это отнести - технике или архитектуре - на Ваш вкус.
Хорошо, намекну по другому. Скажите, а метод push_back в std::vector он плох или хорошо?
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сложить 2 QColor
«
Ответ #38 :
Январь 27, 2013, 13:30 »
Цитата: Old от Январь 27, 2013, 13:06
Хорошо, намекну по другому. Скажите, а метод push_back в std::vector он плох или хорошо?
"Мне сказали сложить 2 QColor по такой-то формуле - я сделал. (какие претензии?)". Конечно никаких, но помнится Вы можете быть куда более активны в плане постановки, напр
Цитата: Old от Январь 10, 2013, 11:17
Цитата: Igors от Январь 10, 2013, 11:11
Да, но таково условие задачи
Это условие вытекает из плохого знания предмета топикстартером. В такой многозадачности просто нет смысла.
Поэтому я и ожидал Вашей уничтожающей критики
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Сложить 2 QColor
«
Ответ #39 :
Январь 27, 2013, 13:38 »
Цитата: Igors от Январь 27, 2013, 13:30
"Мне сказали сложить 2 QColor по такой-то формуле - я сделал. (какие претензии?)".
Намек понят не был, ну да ладно...
Все зависит от контекста его использования (оператора+): для эпизодического сложения двух цветов - он хорош, для складывания массива цветов на время - плох.
Как, в прочем, и все в программирование.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Сложить 2 QColor
«
Ответ #40 :
Январь 28, 2013, 13:07 »
Цитата: Old от Январь 27, 2013, 13:38
Все зависит от контекста его использования (оператора+): для эпизодического сложения двух цветов - он хорош, для складывания массива цветов на время - плох.
Как, в прочем, и все в программирование.
Такая "диалектика" вполне уместна, но что-то уж очень "вообще"
QColor - прекрасный класс для перегонки из одной модели в другую, но для арифметики цветов он совершенно непригоден. Углубимся в детали
Код
C++ (Qt)
qreal
QColor
::
red
(
void
)
const
;
Все строго по книжке - полная инкапсуляция, пользователь не знает (и не должен знать) откуда берется red. Но всегда ли это "так уж хорошо"? Вовсе нет. Довольно редко нужна именно красная компонента, подавляющее большинство операций применяются однообразно ко всем 3 цветам. И аксессоры путаются под ногами, раздувая текст "зато" делая его менее понятным. Вторая проблема еще более неприятна. Сделав red виртуальным (по сути) мы теперь должны "хавать что дают" и не можем дать никаких гарантий производительности.
Если исходные данные хранятся в QColor, то лучшее что мы можем сделать - это вылить его в какую-то промежуточную структуру (на худой конец float[4]), там все посчитать и залить обратно. Поэтому если нужна арифметика цветов, то лучше использовать свой класс, напр такой
Код
C++ (Qt)
template
<
class
T
>
struct
ARGB
{
T a
,
rgb
[
3
]
;
}
;
Обычно увидев такое "знатоки" начинают воротить нос
Однако попробуйте сделать тот же оператор + и, возможно, Вы будете удивлены как прекрасно все получается. И проблем с обрезкой никаких. Видимо сложность/трудность только в том что надо сделать что-то свое (пусть на копейку) - а вдруг это окажется "позорным велосипедом"?
При желании конечно можно сделать все private и "накрутить песики" get/set, потом "зафрендить" оператоы/ф-ции. Но я в упор не вижу зачем такой фигней заниматься. Да, я читал эти книги, и даже помню категорическое "никаких исключений!" в одной из них. Но я так не считаю
Записан
Bepec
Гость
Re: Сложить 2 QColor
«
Ответ #41 :
Январь 28, 2013, 13:15 »
Эммм... Вам не кажется, что вы только что описали qRgb классик? И к чему эта тафтология, если всё равно ваш "оператор", который вы не привели будет рассчитан на узкий спектр задач?
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Сложить 2 QColor
«
Ответ #42 :
Январь 28, 2013, 13:18 »
Цитата: Igors от Январь 28, 2013, 13:07
QColor - прекрасный класс для перегонки из одной модели в другую, но для арифметики цветов он совершенно непригоден.
Точно, именно на это я намекал. Ну и его никто не навязывает для этой арифметики, как и никто не заставляеттак хранить картинки - QVector<QColor>.
«
Последнее редактирование: Январь 28, 2013, 15:39 от Old
»
Записан
m_ax
Джедай : наставник для всех
Offline
Сообщений: 2095
Re: Сложить 2 QColor
«
Ответ #43 :
Январь 28, 2013, 13:58 »
Цитата: Bepec от Январь 28, 2013, 13:15
Эммм... Вам не кажется, что вы только что описали qRgb классик? И к чему эта тафтология, если всё равно ваш "оператор", который вы не привели будет рассчитан на узкий спектр задач?
QRgb - это не классик.. это просто псевдоним на unsigned int
Записан
Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..
Arch Linux Plasma 5
Bepec
Гость
Re: Сложить 2 QColor
«
Ответ #44 :
Январь 28, 2013, 14:29 »
та я знаю
Там как раз и будет гениальная простота работы, как и хочет Igors - без интерфейсов и прочего.
Записан
Страниц:
1
2
[
3
]
4
5
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...