Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2007, 15:03   #1
zzz(KOT)zzz
 
Регистрация: 17.06.2007
Сообщений: 7
Вопрос Проблемы с графикой в Delphi, Индексирование цвета

Люди, помогите плизз, скажите как в Delphi:
— если знаешь цвет точки(Tcolor), получить ее индекс(Byte);
— если знаешь индекс точки, получить ее цвет;
Используется стандартная палитра Windows 256 цветов(8 bits).
zzz(KOT)zzz вне форума Ответить с цитированием
Старый 17.06.2007, 17:25   #2
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Могу лишь подсказать как разбить TColor на R G B цвета, если это тебе поможет. А по какому принципу 256-ти цветная устроена? Если знаешь напиши может подскажу чего.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 18.06.2007, 09:58   #3
zzz(KOT)zzz
 
Регистрация: 17.06.2007
Сообщений: 7
По умолчанию

Как разбить на RGB я тоже знаю, просто задача у меня не в этом. Когда bmp файл сохраняешь с 8 bit, то палитра составлена из 256 цветов, и каждый из этих цветов имеет свой индекс. Это самые используемые цвета от черного к белому. Эту палитру можно посмотреть, например в фотошопе (lmage>Mode>Color Table (Изображение>Режим>Палитра)). Можно конечно переписать все индексы из того же фотошопа в табличку и в рукопашную сравнивать по RGB, но больно уж долго это делать, да и машинного времени уйдет больше
zzz(KOT)zzz вне форума Ответить с цитированием
Старый 18.06.2007, 12:11   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Даже не знаю. Может WinAPI какая ф-я есть? В Delphi я такого не встречал.

Взять например RGB 256*256*256 = 16777216 цветов. Красный имеет индекс 255, зеленый - 65280, синий - 16711680, эти значения и содержит TColor. Какие эти цвета по счету в 256-ти цветной палитре? Если найти закономерность можно самому функцию написать.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 18.06.2007, 16:14   #5
zzz(KOT)zzz
 
Регистрация: 17.06.2007
Сообщений: 7
По умолчанию

Все разобрался=) Если кому интересно:
BitMap := TBitMap.Create;
BitMap.LoadFromFile('c:\1.bmp');//Загружаем нужный файл, ну или просто любой файл bmp
BitMap.PixelFormat := pf8bit;//делаем 8-битным(256 цветов)

s := RGB(xx,xx,xx);//нужный нам цвет
i := GetNearestPaletteIndex(BitMap.Palet te,s);//и собственно индекс цвета
zzz(KOT)zzz вне форума Ответить с цитированием
Старый 18.06.2007, 22:15   #6
zzz(KOT)zzz
 
Регистрация: 17.06.2007
Сообщений: 7
По умолчанию

Теперь надо узнать, как из индекса получить цвет точки...???
zzz(KOT)zzz вне форума Ответить с цитированием
Старый 19.06.2007, 13:38   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Так одному индексу будет соответствовать около 65000 цветов. Что же тогда функция должна возвращать - массив? А если один из подходящих цветов, то какой - первый, последний?
Если что-то нароешь напиши, интересно.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 19.06.2007, 20:20   #8
zzz(KOT)zzz
 
Регистрация: 17.06.2007
Сообщений: 7
По умолчанию

>Так одному индексу будет соответствовать около 65000 цветов.
Почему???
zzz(KOT)zzz вне форума Ответить с цитированием
Старый 20.06.2007, 20:57   #9
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Вообще-то ты прав, должен быть один аналог.

Я исходил из того что в RGB цветов около 16 млн. поделить на 256 получается 65000 цветов которым соответствует один цвет в 8-битной палитре.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПРоблемы с графикой HELP!!! ANARHIST Помощь студентам 2 03.07.2008 09:04
проблемы с графикой joker Win Api 9 01.12.2007 18:32
Можно ли в Delphi использовать такое (#00CCFF) присваевание цвета? Grey Fox Помощь студентам 12 29.10.2007 21:18
Программное индексирование Рустам БД в Delphi 2 27.08.2007 09:34