![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
16 битное значение цвета из 32 битного представления
homm © (2005-10-02 10:06:00)Тривиальная на первый взгля задача: Нужно из 32 бит цвета получить 16 бит, но выравненый по тем же краям.
Казалось бы чего проще: нужно просто обнулить младшие биты (Color AND $F8FCF8), ан нет, в 16 битах реальный
цвет например для цвета ($888888 AND $F8FCF8) вместо $888888 на экране получается $8C8A8C.
MBo (2005-10-03 07:36:00) [1]>двойного преобразования (32->16->32)
Хм...
пожалуй, я не понимаю, что именно требуется
homm (2005-10-02 19:08:00) [2]2 vrem
16 бит по умолчанию.(R-5,G-6,B-5). Мне не нужен был 16 битный цвет, мне нужно было 32 битное представление 16 битного цвета. (фактически 16->32, только 16 не известно, а известен ближайший к нему 32 цвет).
2 MBo
Спасибо, нашел перевод от 16 бит к 32 битам:
Result := (((w and $1F) * 541052) and $FF0000) or
(((((w and $7E0) shr 5) * 266294) shr 8) and $FF00) or
((((w and $F800) shr 11) * 541052) shr 16);
Щас буду думать как без двойного преобразования (32->16->32) добится того-же.
MBo (2005-10-02 10:52:00) [3]Тут есть преобразование
http://www.delphimaster.ru/articles/pixels/index.html
злобная танька (2005-10-02 10:46:00) [4]там ещё какая-то альфа добавляется в 32-битной вроде
NightLord (2005-10-02 10:32:00) [5]> vrem (02.10.05 10:27) [1]
Затем вспомнить, что 32 бита - это по 8 бит = палитра.B.G.R.
Насеолько я помно по 8 бит эт палитра 24 битная, или я ошибаюсь?
vrem (2005-10-02 10:27:00) [6]если 16 бит всего, то сколько на каждый из R, G, B ?
16 на 3 не делится. Поэтому выбрать сколько бит на каждый цвет устраивает.
Затем вспомнить, что 32 бита - это по 8 бит = палитра.B.G.R.
Задача сводится к такой - есть 8 бит на цвет, нужно n бит на цвет.
8 бит = 256 градаций, n бит - допустим 4 бита =2^4 = 16 градаций.
Взять значение 8-битного уровня и преобразовать -
((значение 8-битного уровня)/256)*(количество нужных градаций)