Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

RGB CMY Палитра GetRValue и тд... [D7]


Страницы:   1 2

Vladimir1984 ©   (2006-12-05 21:18:00) 

Не могу подобрать цвета чтобы переход был плавным:
Самый слабый - Красный
Слабый - Желтый
слабый средний - Зеленый
Сильный средний - Голубой
Сильный  - Синий
Самый Сильный - Магнетта

procedure TfrmPulsar3D.bmp1Click(Sender: TObject);
var
 i,j,k:Integer;
begin
 try
   if OpenPictureDialog1.Execute then
     if FileExists(OpenPictureDialog1.FileName) then
     begin
       bmp.Width:=0;
       bmp.Height:=0;
       bmp.LoadFromFile(OpenPictureDialog1.FileName);
       w:=bmp.Width;
       h:=bmp.Height;
       SetLength(vx,w);
       SetLength(nx,w);
       SetLength(cx,w);
       for i:=0 to w-1 do
       begin
         SetLength(vx[i],h);
         SetLength(nx[i],h);
         SetLength(cx[i],h);
       end;
       for i:=0 to w-1 do
         for j:=0 to h-1 do
       // Âûäåëÿåò çíà÷åíèå èíòåíñèâíîñòè èç çíà÷åíèÿ öâåòà RGB è CMY
       // ãäå R - Êðàñíûé, G - Çåëåíûé, B - Ñèíèé()
       //Ñ -  Cyan, M - Ìàãíåòòà, Y - Æåëòûé
         begin
           vx[i,j]:=(100+0.1*GetRValue(bmp.Canvas.Pixels[i,j])+1*
           GetGValue(bmp.Canvas.Pixels[i,j+1])+1*
           GetBValue(bmp.Canvas.Pixels[i,j])+
           GetCValue(bmp.Canvas.Pixels[i,j])-
           GetMValue(bmp.Canvas.Pixels[i,j])+0.32*
           GetYValue(bmp.Canvas.Pixels[i,j])

                     )/3/10;
           cx[i,j,1]:=GetRValue(bmp.Canvas.Pixels[i,j])/255;
           cx[i,j,2]:=GetGValue(bmp.Canvas.Pixels[i,j])/255;
           cx[i,j,3]:=GetBValue(bmp.Canvas.Pixels[i,j])/255;
         end;
       for i:=0 to w-1 do
         for j:=0 to h-1 do
           for k:=1 to 3 do
             nx[i,j,k]:=1;
       for i:=0 to w-2 do
         for j:=0 to h-2 do
           CalcNormals(i,vx[i,j],j,
                       i+1,vx[i+1,j],j,
                       i+1,vx[i+1,j+1],j+1,
                       nx[i,j,1],nx[i,j,2],nx[i,j,3]);
     end else
       MessageBox(Handle,
                  PAnsiChar('Ôàéë '+OpenPictureDialog1.FileName+' íå íàéäåí'),
                  'Îøèáêà',MB_OK or MB_ICONERROR);
 except
   MessageBox(Handle,
              PAnsiChar('Îøèáêà âî âðåìÿ çàãðóçêè ôàéëà '+
                OpenPictureDialog1.FileName),
              'Îøèáêà',MB_OK or MB_ICONERROR);
 end;

end;


Vovan#2   (2006-12-05 21:42:00) [21]

Э-э, разбираюсь в вопросе. Просто заметил:


      SetLength(vx,w);
      SetLength(nx,w);
      SetLength(cx,w);
      for i:=0 to w-1 do
      begin
        SetLength(vx[i],h);
        SetLength(nx[i],h);
        SetLength(cx[i],h);
      end;


Можно проще:


      SetLength(vx, w, h);
      SetLength(nx, w, h);
      SetLength(cx, w, h);


И так и задумывалось?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо