![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Радиальный градиент. Как создать в Делфи7?
Tifon © (2007-04-04 13:59:00)Подскажите алгоритм или ссылку, знаю как создать полосный, разной длины, но немогу понять как создать радиальный, может кто знает.
Amoeba (2007-04-04 17:42:00) [1]
> Tifon © (04.04.07 17:30) [19]
>
> >это что в итоге получается? эллипс темнее снаружи и светлее
> внутри?
>
> да, но я делал его кругом, а не эллипсом, хотя, конечно,
> функцию использовал туже:)
>
> Amoeda, а на 7 Делфи они пойдут? ты не пробовал?
Нет, использую D5. Но на D7 пойти обязаны, может лишь кое-что придется подправить, скорее всего в Uses (компилятор ткнет носом)
Tifon (2007-04-04 17:30:00) [2]>это что в итоге получается? эллипс темнее снаружи и светлее внутри?
да, но я делал его кругом, а не эллипсом, хотя, конечно, функцию использовал туже:)
Amoeda, а на 7 Делфи они пойдут? ты не пробовал?
Amoeba (2007-04-04 16:39:00) [3]Относительно реализации "хитрых" градиентных заливок можно посмотреть исходники одного интересного компонента:
http://anfilat.chat.ru/tpcolore.htm
StriderMan (2007-04-04 16:19:00) [4]это что в итоге получается? эллипс темнее снаружи и светлее внутри?
я как-то эллиптические кнопки делал. там градиент нужен был по фаске (для эффекта выпуклости). делал черезCanvas.Arc
Tifon (2007-04-04 15:48:00) [5]Наконец, все получилось, просто нужно было дважды задавать Brush.Color., а второй раз задавать его с Pen.Color.
Вообщето я делал, спектро анализатор, и в таймере при отображении, я сначала заливал Image черным цветом, это мой конечный цвет градиента, а потом уже рисовал сам градиент, и у меня не получалось, но к стате, при Brush.Style = bcSolid, когда я в цикле рисовал эллипсы, задавая только Brush.Color без Pen.Color, у меня зарисовывались как раз те пиксели, которые при прежних попытках не зарисовывались:)
Большое всем спасибо за помощь.:)
{RASkov} (2007-04-04 15:37:00) [6]Пример к [13] на всякий случай, если с GradientFill будут проблемы.
procedure TForm1.Button1Click(Sender: TObject);
var N, X, Y: Integer; Cl: TColor;
begin
X:=Width div 2;
Y:=Height div 2;
Canvas.Brush.Style:=bsSolid;
for N:= 0 to 100 do begin
Cl:=RGB(N+100, N+150, N);
Canvas.Brush.Color:=Cl;
Canvas.Pen.Color:=Cl;
Canvas.Ellipse(X+(100-N), Y+(100-N), X-(100-N), Y-(100-N));
end;
end;
MBo (2007-04-04 15:29:00) [7]Ты в WInSDK хелпе или в MSDN про GradientFill почитал?
Предупреждаю, что использование этой функции - не очень простая задача.
{RASkov} (2007-04-04 15:24:00) [8]Рисуй эти элипсы от края к центру с Brush.Style=bsSolid, Brush.Color=NewColor и PenColor:=NewColor Думаю мысль понял?
Tifon (2007-04-04 15:05:00) [9]рисуя узкие треугольники с вершиной в центре круга
извини, но не совсем понял, это как? солько, в какие стороны, треугольники - линиями или у canvas есть функция рисования треугольников?
MBo (2007-04-04 14:48:00) [10]Можно использовать функцию GradientFill, рисуя узкие треугольники с вершиной в центре круга
Tifon (2007-04-04 14:38:00) [11]Даже если рисовать изнутри с bsClear, получается такая же проблема.
Похоже, что эллипсы различающиеся диаметром на единицу не сливаются полностью, все равно есть места пропусков.
Думкин, а ты не знаешь какой стиль у Canvas.Brush, чтоб он полностью заливал эллипс?
Думкин (2007-04-04 14:33:00) [12]> Tifon © (04.04.07 14:31) [8]
Не заполняет внутренность. Это если от внутреннего к внешнему.
Tifon (2007-04-04 14:31:00) [13]а что дает этот стиль?
Думкин (2007-04-04 14:31:00) [14]Либо стиль у кисти выставь bsClear
Tifon (2007-04-04 14:31:00) [15]с эллипсом получается проблема, я попробовал его рисовать не из нутри а с наружи, уменьшая его радиус, и тогда у меня получается эффект градинта, но есть пропуски на местах закруглений.
Думкин (2007-04-04 14:29:00) [16]
> Tifon © (04.04.07 14:26) [4]
А ты от внешнего к внутреннему иди.
Tifon (2007-04-04 14:26:00) [17]>Canvas.Ellipse()
а пойдет ли? когда рисуешь эллипс, то он внутри не полый.
Tifon (2007-04-04 14:25:00) [18]while a <= x - 2 do
{Перед рисованием я задаю ему цвет и в этом же цикле по RGB палитре уменьшаю его, для создания уходящего градинта, первый цвет у меня определяется по интенсивности x, а второй - черный}
Im.Canvas.MoveTo(75, Im.Height div 2 - a + 1);
Im.Canvas.LineTo(275, Im.Height div 2 - a + 1);
Im.Canvas.MoveTo(75, Im.Height div 2 + a - 1);
Im.Canvas.LineTo(275, Im.Height div 2 + a - 1);
{так у меня получается две расходящиеся линии градиента вниз и вверх, одного цвета}
end;
Думкин (2007-04-04 14:19:00) [19]Canvas.Ellipse()
Думкин (2007-04-04 14:06:00) [20]Покажи как полосный. Переделаем в радиальный.