Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ соответствие кодов цветов Dos и Windows

Автор: chel 28.05.2004 18:27

помогите кто может! срочно нужна таблица соответствия кодов цветов для DOSа и WINDOWSа , а то я не могу нормально использовать файл .bmp в
паскалевской программе.
если у кого есть скиньте ,пожалста, мне на ящик - <rkv.gorodok.net>
Заранее благодарен.

Автор: BlackShadow 28.05.2004 20:37

2 Administrators:
вам не кажется, что пора создавать раздел "перлы"?
На такие вопросы так и подмывает ответить что-нибудь типа:
Если сзжать BMP по алгоритму Хафмана, а затем три раза преобразовать в фрактальный формат любым способом, найти там все вхождения русской буквы "х", возвести это число в куб, факторизовать и каждый сомножитель логарифмировать по любому модулю, то получишь коэффициенты многочлена-преобразователя.

chel, ты формат BMP знаешь??? Если нет, то как ты его выводить собрался? Может, вопрос не правильно поставлен? А если знаешь, то поясни пожалуйста по-подробнее, что ты понимаешь под "цветами Windows" м "цветами DOS".

Автор: Altair 28.05.2004 21:44

BlackShadow, ты зря погорячился!
Действительно есть такая проблемма. Она у меня тоже возникала, и я ее не решил до сих пор.
Просто chel не правильно задал вопрос. Если он позволит, я его подправлю:
Попробуйте вывести рисунок BMP на экран, а затем еще один.
Старый рисунок испортится, потому что будет введена новая палитра!
А chel хочет узнать, как не меняя СИСТЕМНУЮ палитру, выводить рисунки, как это делает винда.

Автор: virt 29.05.2004 2:16

Oleg_Z
проблема скорее всего в том что в досе в RGB формате исп. цвета 0..63 ,поэтому надо делать так :

Код
r:=bmp.r shr 2;
g:=bmp.g shr 2;
b:=bmp.b shr 2;


http://forum.pascal.net.ru/index.php?showtopic=2022

Автор: Altair 29.05.2004 8:06

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

Да я знаю как выводить, но не знаю как не изменять системную палитру.

Автор: virt 29.05.2004 23:32

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

ЗЫ
кода дать не могу.

Автор: BlackShadow 31.05.2004 14:51

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

Автор: Altair 31.05.2004 19:17

Цитата
проще всего по пропорции.

По какой пропорции? (мне virt один вариант уже предложил, хочу другое мнение услышать)

Автор: BlackShadow 31.05.2004 20:12

Ну, если у тебя 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 31.05.2004 20:36

Цитата
берешь цвета из BMP ,берешь из сист палитры ,берешь их разности по компонентам ,возводишь в квадрат например ,и у цвета из сист палитры ,у которого сумма квадратов самая меньшая (256 цветов ,можно и все перебрать) и есть тот цвет

Автор: BlackShadow 1.06.2004 16:23

Если честно, то долговатый метод. Особенно, если часто цвета менять.

Автор: virt 2.06.2004 0:27

BlackShadow
а если у тебя 256 цветов ,тогда ты как пропорцию сохранишь?

Автор: BlackShadow 11.06.2004 18:03

virt, а как твой метод под такой облом переделать?