IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> как структурировать таблицу цветов 16 бит
сообщение
Сообщение #1


Гость






я проинициализировал графику через ассемблер в 32, и 16 битах. Но в 16 битах цвета расположены(в смысле номериа) как-то  странно. В 32 битах (режим 115h) при, допустим выводе на экран(в смысле проверки) цветов, а точнее перехода цвета из ,например, синего в красный она(программа) плавно вырисовывает все цвета, А в 16 битах (113h) она рисует переход, НО разбивает при этом область вывода на восьми пиксельные куски в нутри каждго из которых цвет идет от синего до красного(яркость зависит от области). ЧТО ДЕЛАТЬ ведь при выводе BMP в 16 дитах получается полная лажа???

                 PLEASE HELP!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ответ хотелось бы получить на мыло(e-mail для тех кто не знает, хотя вряд ли такие есть)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 38

Репутация: -  0  +


Значит, не уверен на все сто, потому что точно не помню, но скажу так:
в 16 битах 16 значимых единиц:
0000:0000  0000:0000

И они должны быть разбиты поровну на три части, чтобы создать три цветовые компоненты - красную, зелёную и синюю.
поделить 16 на три поровну нельзя, зато можно поделить 15 бит.
Получится пять бит. Тоесть на три компоненты уйдёт по пять бит на каждую - 15 бит. И ещё один остаётся.
Так вот насколько я помню зелёный цвет имеет не 5 бит а 6 бит, поскольку человеческий глаз наиболее чувствителен к изменениям в зелёном спектре, и следовательно для него наиболее всего необходимо дополнительное число тоновых градаций.
В общем получаем так:
RRRR:RGGG  GGGB:BBBB
это в битах.
Следовательно красная и синяя компонента цвета может менять свои значения от 0 до 31, а зелёная от 0 до 63.
Комбинируя яркости компонент при помощи побитовых операций можно собрать 16битный цвет.
Вот функции, конвертирующие как туда, так и назад:
Код
function _col(r,g,b:word):word; assembler;
asm
 mov ax,r
 and ax,31
 shl ax,11
 mov bx,g
 and bx,63
 shl bx,5
 add ax,bx
 mov bx,b
 and bx,31
 add ax,bx
 mov [bp-02],ax
end;

procedure col_(col:word;var r,g,b:byte);
var rr,gg,bb:byte;
begin
asm
 mov ax,col
 and ax,31
 mov bb,al
 mov ax,col
 shr ax,5
 and ax,63
 mov gg,al
 mov ax,col
 shr ax,11
 and ax,31
 mov rr,al
end;
 r:=rr;
 g:=gg;
 b:=bb;
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 26.09.2017 8:48
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"