![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() ![]() |
![]() |
maniac |
![]()
Сообщение
#1
|
Гость ![]() |
я проинициализировал графику через ассемблер в 32, и 16 битах. Но в 16 битах цвета расположены(в смысле номериа) как-то странно. В 32 битах (режим 115h) при, допустим выводе на экран(в смысле проверки) цветов, а точнее перехода цвета из ,например, синего в красный она(программа) плавно вырисовывает все цвета, А в 16 битах (113h) она рисует переход, НО разбивает при этом область вывода на восьми пиксельные куски в нутри каждго из которых цвет идет от синего до красного(яркость зависит от области). ЧТО ДЕЛАТЬ ведь при выводе BMP в 16 дитах получается полная лажа???
PLEASE HELP!!!!!!!!!!!!!!!!!!!!!!!!!!!! ответ хотелось бы получить на мыло(e-mail для тех кто не знает, хотя вряд ли такие есть) |
Some1 |
![]()
Сообщение
#2
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 38 Репутация: ![]() ![]() ![]() |
Значит, не уверен на все сто, потому что точно не помню, но скажу так:
в 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; |
![]() ![]() |
![]() |
Текстовая версия | 29.07.2025 15:16 |