|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
09.07.2019, 10:19 | #1 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Работа с палитрой 8 бит RRRGGGBB
Обычно при работе с палитрой 8 бит интенсивность цветов изменяется пропорционально. Для красного и зеленого от 0 до 7, для синего от 0 до 3.
Сейчас работаю на ретро компьютер Профи, клон Спектрума. У него есть палитра 16 из 256 цветов RRRGGGBB, только синяя составляющая имеет "виртуальный" третий бит. Вот что написано: "Так как синяя компонента представлена всего 2-я битами, то считается, что у нее есть младший бит, но он равен всегда 0. Т.е. если мы задаем значение синей компоненты в 11 (т.е. десятичное 3), то для получения белого цвета зелёная и красная компоненты должны быть заданы в значение 110 (десятичное 6). И байт палитры соответствующий белому цвету будет выглядеть как 11011011." То есть обычно в палитре RRRGGGBB в спектре от белого к черному, белый имеет значение 7 7 3, а у Профи белый цвет, с учетом виртуального бита, имеет значение 6 6 6, но записывается как 6 6 3. То есть получаем шаг синего цвета: 0 2 4 6, вместо обычных 0 1 2 3 И есть цвета за "границей" белого цвета. Я не вот в этом ни как не могу разобраться. Нужно получить формулу по перевода палитры 8бит "стандартных" в 8 бит Профи. А так же 24 бит в 8 бит Профи. Стандартные формулы #rrr*(255/7) #rrr*(255/7) #ggg*(255/3) тут уже не подходят. Будут у кого мысли? Или направьте к людям кто сможет помочь.
С уважением, Алексей.
Последний раз редактировалось tae1980; 09.07.2019 в 17:33. |
09.07.2019, 13:27 | #2 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
Цитата:
программа — запись алгоритма на языке понятном транслятору
|
||
09.07.2019, 17:38 | #3 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Я не сильно разочарую если скажу, что ничего не понял?
С уважением, Алексей.
|
09.07.2019, 18:48 | #4 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
с которыми уже можно работать "как обычно" (как указано в вашей формуле) (bb*2)*(255/7)
программа — запись алгоритма на языке понятном транслятору
|
|
09.07.2019, 21:09 | #5 | |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Цитата:
Тут проблема иного рода. Обычно белый цвет граница спектра, дальше цветов нет. Он имеет максимальное значение, все биты заполнены, в формате rgb 7 7 3. А у Профи белый цвет 6 6 6 (110 110 11). То есть он не последний цвет спектра, за ним есть ещё цвета. Уж не знаю за чем так сделали. От сюда "плывёт" вся палитра. Вот и нужна формула для переноса цветов. Если перестроить как есть цвета отдают желтизной. Попробовал ограничить палитру в виде 6 6 6, все что выше игнорировать для чего изменил формулу #rrr*(255/6) #rrr*(255/6) #ggg*(255/3). 7xx и x7x подменяем на 6xxx и x6x соответственно. Цвета стали ближе к реальным. Но появилась краснота (хотя её меньше чем раньше желтизны), и видно, что ряд цветов сливается (это не из-за подмены, она уже учтена).
С уважением, Алексей.
Последний раз редактировалось tae1980; 09.07.2019 в 21:12. |
|
09.07.2019, 23:06 | #6 | ||
Старожил
Регистрация: 23.10.2010
Сообщений: 2,309
|
Цитата:
Вам предложено код цвета bb умножать на 2. Это сдвиг на один бит влево. Если bb|0 -> 01|0, то после умножения на 2 будет 10|0. Тут вертикальной чертой показан бит, который всегда в нуле: Цитата:
Если мной всё правильно было понято.
Как-то так, ...
|
||
10.07.2019, 02:02 | #7 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
|
10.07.2019, 08:03 | #8 | |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
Цитата:
Покажу. Большое изображение, как отображаться в эмуляторе, малое левое исходное изображение 16 цветов, малое правое изображение перевод в формат Профи. У Профи можно задать только два цвета (paper, ink) на 8 горизонтальных точек (байт), от сюда потеря качества. Так выглядит изображение после прямого переноса. 2019-07-09_13-00-38.jpg так выглядит изображение после "выравнивание" белого по 6 6 6 2019-07-09_20-21-33.jpg
С уважением, Алексей.
|
|
10.07.2019, 08:18 | #9 | |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Цитата:
rrr = (color.r * 8) / 256 ggg = (color.g * 8) / 256 bb = (color.b * 4) / 256
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
10.07.2019, 09:24 | #10 |
Форумчанин
Регистрация: 02.02.2009
Сообщений: 842
|
С уважением, Алексей.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Работа с ems api: корректная работа только при явном указании города | mrdemkin | JavaScript, Ajax | 3 | 02.03.2015 18:23 |
Как работать с системной палитрой?? | artiom4356 | Общие вопросы Delphi | 0 | 29.05.2014 18:56 |
Задания по работе с палитрой компонентов Additional.(Delphi) | Наташок | Помощь студентам | 1 | 18.04.2011 21:50 |
Работа с webbrowser - Фреймы, работа с конкретным феймом в фрейме | NewDelphi | Фриланс | 2 | 08.10.2009 11:00 |