16-битный цвет в 24-битный

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

16-битный цвет в 24-битный

Сообщение Odrick » 01.09.2005 (Чт) 19:47

В общем вопрос в следующем. Как корректно перевести 16-битный цвет в 24-битный. Даже, скорее, вопрос не в этом. Мне нужно затемнить некий регион. Для 24-битного цвета все до смешного просто:

Result = Alpha * srcColor

где Alpha - коэфициент затемнения от 0 до 1, srcColor - исходный цвет.
А как это сделать для 16-битного цвета? :? В приницпе можно преводить 16-битный в 24-битный, проводить затемнение, а потом возвращать обратно в 16-битный... Этот вариант тоже подходит.
То, что для одних константа, для других только переменная...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: 16-битный цвет в 24-битный

Сообщение tyomitch » 01.09.2005 (Чт) 21:27

Odrick писал(а):Для 24-битного цвета все до смешного просто:

Result = Alpha * srcColor

где Alpha - коэфициент затемнения от 0 до 1, srcColor - исходный цвет.

Хочу затемнить синий (&HFF0000) цвет в два раза (Alpha = 0,5)
Ой! Получается тёмно-зелёный! (&H7F8000)
В чём же дело? ;-)
Изображение

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Re: 16-битный цвет в 24-битный

Сообщение vvs_adm » 01.09.2005 (Чт) 21:35

tyomitch писал(а):В чём же дело? ;-)
Дело в том, что затемнять нужно было красный и все бы получилось :lol:

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 01.09.2005 (Чт) 23:54

Ну ладно-ладно, постебались :lol: Согласен - стормозил. Так все же. Как перевести быстро 16-битный цвет в 24-битный? Я понимаю, что можно побитно (5-6-5) вытягивать цвета, потом складывать назад. Но это мучительно долго будет при больших размерах региона...
То, что для одних константа, для других только переменная...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 02.09.2005 (Пт) 0:46

быстро - GetDIBits в массив Long-ов, и с ними делай что хочешь.
GDI само всё разобьёт по битам и сконвертирует.
Изображение

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 02.09.2005 (Пт) 3:15

Ага, понятно. Спасибо - буду разбираться ;)
То, что для одних константа, для других только переменная...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 105

    TopList