![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Заполнение Canvas цветами от синего к красному [D7, WinXP]
guitarist © (2006-02-09 17:48:00)Вот решил сделать что-то типа визуализатора. Каждой точке canvas присвоил какое-то число. А теперь хочу вывести этот canvas таким образом, чтобы чем больше число, тем ближе к синему был цвет, а чем меньше тем ближе к красному. Подобрать формулу сам что-то пока не смог. Помогите, пожалуйста.
PS Только про зеленый забывать не следует, я думаю, если зеленый в RGB принять за константу работать не будет, хотя я может быть ошибаюсь.
XProger (2006-02-10 23:40:00) [1]Для человека с "незаконченным высшим" образованием - стыдно не решить подобную задачу. Всё необходимое для её решения мы дали, осталось только чуть-чуть подумать и решить задачу. Оставлю это удовольствие Вам...
guitarist (2006-02-10 21:41:00) [2]Хм, а мне казалось понятно объяснил.
Вот посмотрите, пожалуйста, как сделать хочется.
http://avtogoal.narod.ru/123.JPG
XProger (2006-02-10 20:04:00) [3]
const
MAX_NUM = 640;
...
procedure TForm1.NumOut(X, Y: Integer; Value: Integer);
var
c : Integer;
begin
c := Value * 255 div MAX_NUM;
Canvas.Font.Color := RGB(c, 0, 255 - c);
Canvas.TextOut(X, Y, IntToStr(Value));
end;
К сожалению, я - человек не пьющий, так что сути вопроса ясно понять не могу...
antonn (2006-02-10 13:38:00) [4]может так:
function GetColorMegduRandB(level,Max:integer):Tcolor;
var r,b:byte;
begin
r:=trunc(level*255/max);
b:=255-r;
result:=rgb(r,0,b);
end;
использование примерно такое:
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
canvas.Brush.Color:=GetColorMegduRandB(TrackBar1.Position,TrackBar1.Max);
canvas.FillRect(rect(0,0,100,100));
end;
antonn (2006-02-10 13:27:00) [5]guitarist © (10.02.06 13:24) [3]
а нужно именно то, что я написал
без пол-литра не понять, что вы хотите...
guitarist (2006-02-10 13:24:00) [6]XProger.
То что предложили Вы -- это что-то вроде градиентной заливки, а нужно именно то, что я написал
XProger (2006-02-09 23:55:00) [7]
const
W = 640;
H = 480;
var
i, c : Integer;
begin
for i := 0 to H - 1 do
begin
c := i * 255 div H;
Canvas.Pen.Color := RGB(c, 0, 255 - c);
Canvas.MoveTo(0, i);
Canvas.LineTo(W, i);
end;
end;
antonn (2006-02-09 18:56:00) [8]глянь тут:
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1137971881&n=18