![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
AVA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 4.6.2004 Где: г. Калуга Репутация: нет Всего: нет |
TColor -> 32бита -> 4байта. 3-и из них это RGB цвета, а для чего 4-й?
И ещё вопрос, предположим у меня палитра 256 цветов, то каким образом пределенный цвет из этой палитры впишется в эти 32 бита ![]() Это сообщение отредактировал(а) AVA - 9.6.2004, 15:25 |
|||
|
||||
Kesh |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2488 Регистрация: 31.7.2002 Где: Германия, Saarbrü cken Репутация: 4 Всего: 54 |
Ну, например, для задания alpha-канала... Т.е. определить прозрачность цвета в тех же [0..255]
-------------------- ![]() |
|||
|
||||
Cheba |
|
|||
![]() pointless one ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1777 Регистрация: 27.11.2003 Где: /dev/null Репутация: 1 Всего: 62 |
В Win32 значение этого "незадействованого" байта определяет это обычный RGB или системный цвет, напимер цвет кнопок или рабочего стола.
|
|||
|
||||
AVA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 4.6.2004 Где: г. Калуга Репутация: нет Всего: нет |
Ну а как будет выглядеть значение из 8битовой палитры (256 цветов) в этих 32-х битах?
![]() |
|||
|
||||
Cheba |
|
|||
![]() pointless one ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1777 Регистрация: 27.11.2003 Где: /dev/null Репутация: 1 Всего: 62 |
Тут есть два варианта.
Первый: Индексированый цвет. В этом случае где-то должна быть таблица соответствий, содержащая цвет в RGB и индексы. По индексу можно определить достать нормальный TColor. Второй: Сжатый цвет. В этом случае обычно выделяют 3 бита на красный, 2 - на зеленый и 3 - на синий. Могут быть и иные вариации. В этом случае тоже можно определить значение TColor повозившись немного. Ничего сложного нет. Например для сочетания 3-2-3 значение 179 ($B3, в бинарном виде 10110011) значением TColor будет $009B7E5D. |
|||
|
||||
AVA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 4.6.2004 Где: г. Калуга Репутация: нет Всего: нет |
а как можно узнать какой вариант использовался в кодировке (3-2-3 или ещё какой)? |
|||
|
||||
Cheba |
|
|||
![]() pointless one ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1777 Регистрация: 27.11.2003 Где: /dev/null Репутация: 1 Всего: 62 |
Зависит от того где это используется.
Ты бы по-конкретней задачу описал... |
|||
|
||||
AVA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 4.6.2004 Где: г. Калуга Репутация: нет Всего: нет |
Вкратце: есть последовательность байт, которые надо вывести на экран ввиде пикселей разного цвета. Этот экран находится на удаленном рабочем столе и палитра там 256 цветов. Затем у меня, посредством удаленного рабочего стола какой-нить программы захватить эту картинку и преобразовать опять в последовательность байт (но палитра у меня уже труколорная).
Вот и получается проблемма закодировать байт в цвет так, чтобы потом система не округлило это значение до своего ближайшего и т.п. |
|||
|
||||
Cheba |
|
|||
![]() pointless one ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1777 Регистрация: 27.11.2003 Где: /dev/null Репутация: 1 Всего: 62 |
Тут все просто (наверное). Поскольку на удаленном рабочем столе виндовская палитра, ты можешь без опасений (наверное) просто убавить глубину цвета битмепа до восьми бит - Винды автоматом преобразуют в ту же палитру что и на удаленной машине.
Внимание! Если на удаленной машине работает не обычное приложение, а какая-то игрушка с DirectX или OpenGL, то тут уже хуже. Они могут задавать свою палитру и, наверное, распределение битов. |
|||
|
||||
AVA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 4.6.2004 Где: г. Калуга Репутация: нет Всего: нет |
На удаленной машине будет находиться мое приложение которое будет кодировать..., Чего-то я такое слышал что при политре 256, около 20 цветов занято системмой, что-то мне подсказывает что это ещё один трабл.
|
|||
|
||||
x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 19 Всего: 22 |
не понял, что за три бита?
старшый байт всегда определяет, откуда будут браться значения последующих трёх байтов, ни о каком сжатии здесь речи не идёт. 00 - значения из системной палитры 01 - значения из реализованной палитры 02 - значения из логической палитры контекста устройства (device context), к которому мы обращаемся. по сути, цвет никогда напрямую не задаётся, значения трёх младших составляющих байтов - это всегда просто индекс в соответствующей палитре, задаваемой старшим байтом. то, что мы считаем "чистым цветом" - это просто цвет из системной палитры. про цвета, "занятые системой" тоже не понял. есть стандартные 24 константы, которые можно увидеть в свойствах экрана, на вкладке "Оформление", открыв комбу "Элемент". Это просто константы. которым благополучно можно присвоить любые собственные цвета. Они переопределены в Graphics.pas, но на программировании GUI виндовые цвета никоим образом не сказываются. можно написать MyColor := clBtnFace, можно написать MyColor := clSilver, при стандартных настройках вы получите одинаковый цвет. При нестандартных - разные. вот и всё. Какие тут могут быть траблы? Про преобразование палитры. я опять нифига не понял. зачем её преобразовывать?? вы надеетесь, что 8-битная палитра, преобразованная в 24 бита, вдруг сама себя раскрасит 24 битами вместо восьми? вы получите ту же самую картинку. так нафига её преобразовывать? работайте с 8-битной картинкой и всё, какие здесь проблемы? если я правильно понимаю, картинка будет дёргаться по сети. надо думать, что не в бмп. скорее всего, jpg. вот вам и ответ на все вопросы. преобразовывайте, меняйте глубину цвета (смысла в этом я лично не вижу, но мало ли), для всего этого есть стандартные функции, от управления качеством сжатия (соотв. и размером картинки, что немаловажно), до глубины цвета и метода отображения на экране. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
Cheba |
|
|||
![]() pointless one ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1777 Регистрация: 27.11.2003 Где: /dev/null Репутация: 1 Всего: 62 |
x77, задачей AVA является передача данных таким вот извратным методом. На удаленной машине его прога семафорит некоторым количеством цветов. Тоесть байтовый массив преобразуется в битмеп, где каждому значению байта соответствует определенный цвет. Он будет через Remot Desctop захватывать изображение в 8-ми битной палитре и по нему нужно восстановить последовательность байтов. Поэтому ему и нужно преобразование.
AVA, предоставь всю возню с палитрами Виндам. 20 цветов он никуда не занимает, тут x77 прав. Винды всегда преобразуют цвет по методу Nearest Color. |
|||
|
||||
BraM's |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 2.7.2004 Репутация: нет Всего: 1 |
Народ! Сорри, что поднимаю старую тему, но у меня возникла проблема:
Какие биты отвечают за какой цвет в случае 16bit палитры? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |