Помощь - Поиск - Пользователи - Календарь
Полная версия: соответствие кодов цветов Dos и Windows
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
chel
помогите кто может! срочно нужна таблица соответствия кодов цветов для DOSа и WINDOWSа , а то я не могу нормально использовать файл .bmp в
паскалевской программе.
если у кого есть скиньте ,пожалста, мне на ящик - <rkv.gorodok.net>
Заранее благодарен.
BlackShadow
2 Administrators:
вам не кажется, что пора создавать раздел "перлы"?
На такие вопросы так и подмывает ответить что-нибудь типа:
Если сзжать BMP по алгоритму Хафмана, а затем три раза преобразовать в фрактальный формат любым способом, найти там все вхождения русской буквы "х", возвести это число в куб, факторизовать и каждый сомножитель логарифмировать по любому модулю, то получишь коэффициенты многочлена-преобразователя.

chel, ты формат BMP знаешь??? Если нет, то как ты его выводить собрался? Может, вопрос не правильно поставлен? А если знаешь, то поясни пожалуйста по-подробнее, что ты понимаешь под "цветами Windows" м "цветами DOS".
Altair
BlackShadow, ты зря погорячился!
Действительно есть такая проблемма. Она у меня тоже возникала, и я ее не решил до сих пор.
Просто chel не правильно задал вопрос. Если он позволит, я его подправлю:
Попробуйте вывести рисунок BMP на экран, а затем еще один.
Старый рисунок испортится, потому что будет введена новая палитра!
А chel хочет узнать, как не меняя СИСТЕМНУЮ палитру, выводить рисунки, как это делает винда.
virt
Oleg_Z
проблема скорее всего в том что в досе в RGB формате исп. цвета 0..63 ,поэтому надо делать так :
Код
r:=bmp.r shr 2;
g:=bmp.g shr 2;
b:=bmp.b shr 2;


а вообще здесь есть
Altair
Цитата
а вообще здесь есть

Да я знаю как выводить, но не знаю как не изменять системную палитру.
virt
винда работает в 32 битном режиме ,и поэтому у нее нет палитры.
а на компах на которых мониторы не поддерживают 32бита ,тама ищется цвета которые наиболее рядом с цветом кот надо вывести.

ЗЫ
кода дать не могу.
BlackShadow
virt прав. В таком случае надо просто подбирать подходящий цвет. проще всего по пропорции.
Если погорячился, то пардон, но иногда такие вопросы добивают.
Altair
Цитата
проще всего по пропорции.

По какой пропорции? (мне virt один вариант уже предложил, хочу другое мнение услышать)
BlackShadow
Ну, если у тебя 15-битный режим, то можно было бы попробывать так:
Код

Function RGB15(r,g,b:Byte):Word;Assembler;
Asm
 MOV AL,[r]
 SHL AX,5
 OR AL,[g]
 SHL AL,5
 OR AL,[b]
 AND AX,7FFFh
End;

Function RGB32ToRGB15(Color:LongInt):Word;
Var
 r,g,b:Byte;
Begin
 r:=(Color And $00FF0000) Shr 16;
 g:=(Color And $0000FF00) Shr 8;
 b:=(Color And $000000FF);
 r:=Round(31*r/255);
 g:=Round(31*g/255);
 b:=Round(31*b/255);
 RGB32ToRGB15:=RGB15(r,g,b)
End;

Или что-то типа этого. А что virt прислал что-то другое? Выложи - интересно.
Altair
Цитата
берешь цвета из BMP ,берешь из сист палитры ,берешь их разности по компонентам ,возводишь в квадрат например ,и у цвета из сист палитры ,у которого сумма квадратов самая меньшая (256 цветов ,можно и все перебрать) и есть тот цвет
BlackShadow
Если честно, то долговатый метод. Особенно, если часто цвета менять.
virt
BlackShadow
а если у тебя 256 цветов ,тогда ты как пропорцию сохранишь?
BlackShadow
virt, а как твой метод под такой облом переделать?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.