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

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Изменение базовых данных  (Прочитано 2714 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Март 29, 2015, 10:07 »

Добрый день

"Архитектурный" вопрос, ну наверное (полагаю) паттерны и все такое Улыбающийся Есть громадный QImage ARGB32 (грубо говоря) размер которого нередко гигабайты. Расчеты выполняются во флотах, рез-т сохраняется в ARGB32. Точка имеджа unsigned int, читается/пишется с помощью ф-ций типа qRgba.

И вот в один прекрасный день оказалось что 8-бит на канал мало для продвинутых пользователей. Подавай им 16, причем всяко-разно, 16 может быть unsigned short  или "пол-флота" (half).  При этом 8-бит никто не отменял, те 16 нужны относительно редко - но нужны. Т.е. юзер поставил бубочку - вывод 16-битный, иначе 8-битный (ну это он так хочет).

Проблема в том что unsigned int рассыпаны по всему коду, масса адресной арифметики использует sizeof(uint). Заменить прямолинейно на 4 ushort - уже работа на недели, но это просто не годится т.к. 8-бит тоже должно поддерживаться. Начинать городить if'ы - выглядит как верный путь к слабоумию.

Что бы Вы предложили?
Спасибо
« Последнее редактирование: Март 29, 2015, 10:09 от Igors » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Март 31, 2015, 08:26 »

Пугающая активность Улыбающийся Хотя я сам пока не знаю что делать - нужен какой-то план. Решил выделить типичные использования данных ARGB32 в коде. Случай первый: ARGB32 хранится в структуре данных
Код
C++ (Qt)
struct CBigStruct {
 ...
 ...
 ARGB32 mColor;
 ARGB32 mAlpha;
 ...
 ...
};
Как это должно выглядеть с "универсальным" цветом (8/16 на канал)?
По ходу дела заметим: если есть прозрачность - нужны 4 буфера вместо одного.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #2 : Август 20, 2015, 23:55 »

Может баяню уже... но мы для подобной задачи 2 класса сделали с методами для их обработки, один класс для 8 битов, другой для 16.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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