![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
RGB CMY Палитра GetRValue и тд... [D7]
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);
И так и задумывалось?