Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.22;
Скачать: CL | DM;

Вниз

Радиальный градиент. Как создать в Делфи7?   Найти похожие ветки 

 
Tifon ©   (2007-04-04 13:59) [0]

Подскажите алгоритм или ссылку, знаю как создать полосный, разной длины, но немогу понять как создать радиальный, может кто знает.


 
Думкин ©   (2007-04-04 14:06) [1]

Покажи как полосный. Переделаем в радиальный.


 
Думкин ©   (2007-04-04 14:19) [2]

Canvas.Ellipse()


 
Tifon ©   (2007-04-04 14:25) [3]

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;


 
Tifon ©   (2007-04-04 14:26) [4]

>Canvas.Ellipse()

а пойдет ли? когда рисуешь эллипс, то он внутри не полый.


 
Думкин ©   (2007-04-04 14:29) [5]


> Tifon ©   (04.04.07 14:26) [4]

А ты от внешнего к внутреннему иди.


 
Tifon ©   (2007-04-04 14:31) [6]

с эллипсом получается проблема, я попробовал его рисовать не из нутри а с наружи, уменьшая его радиус, и тогда у меня получается эффект градинта, но есть пропуски на местах закруглений.


 
Думкин ©   (2007-04-04 14:31) [7]

Либо стиль у кисти выставь bsClear


 
Tifon ©   (2007-04-04 14:31) [8]

а что дает этот стиль?


 
Думкин ©   (2007-04-04 14:33) [9]

> Tifon ©   (04.04.07 14:31) [8]

Не заполняет внутренность. Это если от внутреннего к внешнему.


 
Tifon ©   (2007-04-04 14:38) [10]

Даже если рисовать изнутри с bsClear, получается такая же проблема.

Похоже, что эллипсы различающиеся диаметром на единицу не сливаются полностью, все равно есть места пропусков.

Думкин, а ты не знаешь какой стиль у Canvas.Brush, чтоб он полностью заливал эллипс?


 
MBo ©   (2007-04-04 14:48) [11]

Можно использовать функцию GradientFill, рисуя узкие треугольники с вершиной в центре круга


 
Tifon ©   (2007-04-04 15:05) [12]

рисуя узкие треугольники с вершиной в центре круга

извини, но не совсем понял, это как? солько, в какие стороны, треугольники - линиями или у canvas есть функция рисования треугольников?


 
{RASkov}   (2007-04-04 15:24) [13]

Рисуй эти элипсы от края к центру с Brush.Style=bsSolid, Brush.Color=NewColor и PenColor:=NewColor Думаю мысль понял?


 
MBo ©   (2007-04-04 15:29) [14]

Ты в WInSDK хелпе или в MSDN про GradientFill почитал?

Предупреждаю, что использование этой функции -  не очень простая задача.


 
{RASkov}   (2007-04-04 15:37) [15]

Пример к [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;


 
Tifon ©   (2007-04-04 15:48) [16]

Наконец, все получилось, просто нужно было дважды задавать Brush.Color., а второй раз задавать его с Pen.Color.

Вообщето я делал, спектро анализатор, и в таймере при отображении, я сначала заливал Image черным цветом, это мой конечный цвет градиента, а потом уже рисовал сам градиент, и у меня не получалось, но к стате, при Brush.Style = bcSolid, когда я в цикле рисовал эллипсы, задавая только Brush.Color  без Pen.Color, у меня зарисовывались как раз те пиксели, которые при прежних попытках не зарисовывались:)

Большое всем спасибо за помощь.:)


 
StriderMan ©   (2007-04-04 16:19) [17]

это что в итоге получается? эллипс темнее снаружи и светлее внутри?

я как-то эллиптические кнопки делал. там градиент нужен был по фаске (для эффекта выпуклости). делал через Canvas.Arc


 
Amoeba ©   (2007-04-04 16:39) [18]

Относительно реализации "хитрых" градиентных заливок можно посмотреть исходники одного интересного компонента:
http://anfilat.chat.ru/tpcolore.htm


 
Tifon ©   (2007-04-04 17:30) [19]

>это что в итоге получается? эллипс темнее снаружи и светлее внутри?

да, но я делал его кругом, а не эллипсом, хотя, конечно, функцию использовал туже:)

Amoeda, а на 7 Делфи они пойдут? ты не пробовал?


 
Amoeba ©   (2007-04-04 17:42) [20]


> Tifon ©   (04.04.07 17:30) [19]
>
> >это что в итоге получается? эллипс темнее снаружи и светлее
> внутри?
>
> да, но я делал его кругом, а не эллипсом, хотя, конечно,
>  функцию использовал туже:)
>
> Amoeda, а на 7 Делфи они пойдут? ты не пробовал?

Нет, использую D5. Но на D7 пойти обязаны, может лишь кое-что придется подправить, скорее всего в Uses (компилятор ткнет носом)



Страницы: 1 вся ветка

Текущий архив: 2007.04.22;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.045 c
3-1170519998
SerVit
2007-02-03 19:26
2007.04.22
Ошибка при вставке данных с русскими буквами


6-1161645714
Fus1on
2006-10-24 03:21
2007.04.22
Как читать mp3 по ссылке и сразу воспроизводить?


2-1175517371
annn
2007-04-02 16:36
2007.04.22
Процедуры и функции


1-1172047081
paradox01
2007-02-21 11:38
2007.04.22
Как изменить курсор?


10-1131624226
Ruslanyd
2005-11-10 15:03
2007.04.22
Подключение к открытому файлу *.xls