forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   Формула Градиента (http://forum.boolean.name/showthread.php?t=5280)

kyb66 13.12.2007 12:04

Формула Градиента
 
Для градиента использую формулу, любезно предоставленную Odd

Procedure Gradient(h_i, w_i : Integer);
Var
i : integer;
begin
for i:= h_i downto 0 do
begin
SetColor((128 * i) / h_i, (128 * i) / h_i, (128 * i) / h_i);
DrawLine(0,h_i-i,w_i,h_i-i);
end;
end;

Однако на эмуляторе градиент получается гладкий, а на теле - явно проявляются полосы. В чем дело?

Данил 13.12.2007 12:38

Re: Формула Градиента
 
гы) мож цветов мало?)

Kurdt 13.12.2007 15:00

Re: Формула Градиента
 
бери шаг большетоже такое было вроде это от телефона зависит так и не разобрался чего так цветов вроде МНОГО в теле было

Перестань использовать скрытый мат. Есть нормальный язык.

kyb66 13.12.2007 15:30

Re: Формула Градиента
 
Шаг больше в чем? В каком месте цикла? Тело SE K750i Цветов 256 тышщ

odd 14.12.2007 08:46

Re: Формула Градиента
 
Да просто в теле цветов меньше. Вот и всё. Поэтому полосы и получаются.
Количество цветов и альфа-уровней можно узнать с помощью методов
.numColors() и .numAlphaLevels() класса display. Придётся библиотеку писать...

Kurdt 14.12.2007 14:19

Re: Формула Градиента
 
еще способ попробуй как вариант сделать не переход одного цвета а например сразу всех смешивание
я не пробовал вроде работало... не помню точно
вот приколная градиентная рамочка кому мож пригодитца
Код:

Procedure ramka(tp:integer);
Var i:integer;
Begin
for i:= 0 to 4 do begin

if tp = 0 then setcolor(190+i*10,190-i*10,i*5+55);
if tp = 1 then setcolor(110-i*20,110-i*20,110-i*20);

DrawRect(i,i,getWidth-5,getHeight-5);
                        end;

end;

вот градиеные эфекты заполнения екрана типа финиш старт.. тп
Код:

procedure coolClear(tp:integer);
Var i,j,w,h:integer;
        jm:real;
begin
//setcolor(random(255),random(255),random(255));
setcolor(0,0,0);
jm:=254/(getHeight/2);
For i:= 0 to getHeight/2 do begin
//setcolor(50+i*2,50+i*2,50+i*2);
if (tp=1)or(tp=3) then setcolor(trunc(i*jm),trunc(i*jm),trunc(i*jm));
DrawRect(i,i,getWidth-i*2,getHeight-i*2);
//DrawEllipse(0,0,i,i);
if tp<>3 then if Odd(i) then repaint;
//delay(10);
end;
end;


kyb66 14.12.2007 14:27

Re: Формула Градиента
 
так это из твоего модуля TextPrint... я уже видал


Часовой пояс GMT +4, время: 17:57.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot