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

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

Форум «Всё о Паскале» _ Теоретические вопросы _ RGB =>> Default

Автор: Despot 23.03.2003 0:25

Как перевести пиксел из RGB палитры в обычную для Pascal (например, для 16 цветов?)

Автор: GLuk 23.03.2003 1:27

Что ты имеешь ввиду ???  :oНет такого понятия "пиксел из RGB палитры". Тама не пиксели, а значения составляющих. У меня есть только одно предположение, что ты хочешь этим выразить - возможно фишка в этом: тебе нужно урезать кол-во цветов с 256/16M до 16/4/2... или, может, ты просто не значешь как его прочитать. Короче, сформулируй вопрос поточнее

Автор: Shadow 23.03.2003 8:02

smile.gif SetRGBPalette (c,r,g,B);
c цвет
r красный градац
g зелен
b синий
может ето оно то что нада
:smile.gif

Автор: Despot 23.03.2003 10:57

мне нужно прочитать информацию из bmp файла...
каждая точка в нем описана тремя значениями red green и blue ... а потом прочитанную информацию отобразить в граф. режиме Pascal... (проблема в том, как из знач. в rgb преобразовать в обычную для Pascal 16-цветную палитру)

Автор: GLuk 23.03.2003 12:03

Вишь ли Despot "обычная для Pascal 16-цветная палитра" - это первые 16 цветов той самой RGB-палитры ;). Если ты спрашиваешь, как изменить вот эти первые 16 цветов, то код следующий (асм, паскаль):

Код
asm
       mov dx,3C8h {Режим записи PEL-адреса}
       mov al,0        {Стартовый адрес регистра}
       out dx,al   {Говорим об это ЦАП-у}
       inc dx        {Запись данных}
       cld
       mov cx,16*3 {16 штук}
       push ds        
       mov ds,word ptr P + 2 {Это адрес палитры}
       mov si,word ptr P
{Этот код для переделанной палитры BGR -> RGB}
@PalSet:lodsb            {Получаем байт в AL}
       out dx,al            {Посылаем в ЦАП}
       loop @PalSet
       pop ds
       mov ah,0            {Ждем клавишу}
       int 16h
end;


Procedure PaletteSet;
Type
   RGB = record
   Red:Byte;
   Green:Byte;
   Blue:Byte;
   {Alpha:Byte; Это ежели под Win'95}
   end;

   Palette = array[1..256] of RGB;
  {На всякий случай - это массив для чтения палитры}
Var
  P:^Palette;
  I:Integer;
begin
    Port[$3C8]:=0;
    For i:=1 to 256 do
    begin
         Port[$3C9]:=P^[i].Blue DIV 4;
         {Что характерно - порядок обратный
         B=>G=>R, да и вывод изображения
         идет снизу вверх}
         Port[$3C9]:=P^[i].Green DIV 4;
         Port[$3C9]:=P^[i].Red DIV 4;
    end;
end;


Но если и это не то, дык выложил бы исходник, глянули бы. И сколько цветов картинка?

Автор: Despot 23.03.2003 18:26

А если без asm? Я просто asm не знаю совсем, а потому не понимаю я этого программного кода и применить не могу ??? Да, и динамические структуры
постарайся не использовать... пожалуйста:-)
 

Автор: GLuk 23.03.2003 20:35

Я ваще не понимаю, что тебе надо. Хочешь, оставь мыло и я скину на него исходник работы с BMP-форматом на Паскале... :o :o :o

Автор: Despot 23.03.2003 22:21

ЧТо мне надо?... Сколько уже можно объяснять?:-) :-/
Я прочитываю информацию из bmp файла... дохожу до информации о точках, собственно...
считываю значения red green blue......... для точки.
Как мне теперь эту точку отобразить на экране?
если чего, то мыло: 2karmen@mail.ru

Автор: Shadow 23.03.2003 22:49

smile.gif кину тебе библию ;D для работы с BMP
полность на ПАСЛЕ
погодь трошки

-----------
на 256 цевтов уместе с драевером svga256.bgi

Автор: Alex 23.03.2003 23:42

Shadow, кинь мне тоже!PLZ!!

Автор: Shadow 24.03.2003 2:10

УГУ кидаю УЖО :-* smile.gif

Автор: Slam 24.03.2003 20:36

Поделись хорошей вещью komarik15@yandex.ru ;)