搞过渐变的弟兄(女的也可以)请进来(53分)

  • 主题发起人 主题发起人 曾阿牛
  • 开始时间 开始时间

曾阿牛

Unregistered / Unconfirmed
GUEST, unregistred user!
FromR := Brush.Color and $000000ff;
FromG := (Brush.Color shr 8) and $000000ff;
FromB := (Brush.Color shr 16) and $000000ff;
DiffR := (clwhite and $000000ff) - FromR;
DiffG := ((clwhite shr 8) and $000000ff) - FromG;
DiffB := ((clwhite shr 16) and $000000ff) - FromB;
这是我在大富翁上面搜到的一段代码!
上面这段代码可否解释一下!
 
easy
等我有时间,和你说一下
 
你还是把你的要求说一下,究竟是什么样子的颜色渐变
 
比如从兰色变到白色!!
 
取出初始颜色和目的颜色的RGB值,
中间的过渡颜色用线性变化就可以吧!!
这段程序我是这样看的!!

FromR,FromG,FromB就分别是初始色彩的R,G,B值(一个颜色得值有用的是3个字节,
分别就是B,G,R,就是三原色的值)用右移操作分别取出!!
而DiffR,DiffG,DiffB,就分别是初始图像三原色到白色的三原色的差值!!

我想用CurrentR:=FormR+DiffR*T;
CurrentR:=FormR+DiffR*T;
CurrentR:=FormR+DiffR*T;
这样就能得到当前颜色随时间变化的函数!!
这样就可以色彩渐变了!!要是T换成位置坐标,就能得要位置的渐变了!!
 
Bitmap:=TBitmap.Create;
//创建TBitMap实例
try
Bitmap.LoadFromFile('d:/windows/Coffee Bean.bmp');
Bitmap.PixelFormat:=pf24bit;
image1.Height:= Bitmap.Height;
image1.Width:= Bitmap.Width;
for i:=0 to 255 do
begin
sleep(10);
for y:=0 to Bitmap.Height-1 do
begin
pixcolo:=Bitmap.Scanline[y];//扫描每行像素颜色
for x:=0 to ((Bitmap.Width*3)-1) do
if pixcolo[x]>0 then pixcolo[x]:=(pixcolo[x]-1);
//递减颜色值,不同的递减值可改变不同的速度
end;
Image1.Canvas.Draw(0,0,Bitmap);
Application.ProcessMessages;
end;
finally
Bitmap.free; end;
注意: 此代码是一个渐变程序代码!你可以自己调试一下!
 
还可以从颜色的hsl空间考虑
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
854
import
I
I
回复
0
查看
647
import
I
I
回复
0
查看
776
import
I
后退
顶部