怎样知道FORM任上一点的Tcolor,要求那一点的坐标精确到小数点后一位,如(0.2,2.6),GETPixels只能得到整数点的值(100分)

  • 主题发起人 主题发起人 delphilove
  • 开始时间 开始时间
D

delphilove

Unregistered / Unconfirmed
GUEST, unregistred user!
用插值法计算吧
 
详细点,不然不给你分!!!!!!!!!!!!!哼哼
 
画布以像素为单位,当然只能精确到整数了,所以你的坐标只要舍入为整数即可。
如果你使用的是用户坐标系,那就应该有一个到屏幕(窗口)坐标系的转换函数。
 
var
x2,y2,x3,y3:Real;
x,y:Integer;
Color1,Color2,Color3,Color4:Integer;
CR,CG,CB,CR1,CG1,CB1,CR2,CG2,CB2,CR3,CG3,CB3,CR4,CG4,CB4:Integer;

//坐标为real
x2:=10。2
y2:=30。7
//取坐标的绝对值
x:=trunc(x);
y:=trunc(y);

x3:=x-x1;
y3:=y-y1;

Color1:=Bmp.Canvas.Pixels[x,y];
Color2:=Bmp.Canvas.Pixels[x+1,y];
Color3:=Bmp.Canvas.Pixels[x,y+1];
Color4:=Bmp.Canvas.Pixels[x+1,y+1];
CR1:=GetRValue(Color1);
CG1:=GetGValue(Color1);
CB1:=GetBValue(Color1);
CR1:=(1-x3)*CR1;
CG1:=(1-x3)*CG1;
CB1:=(1-x3)*CB1;

CR2:=GetRValue(Color2);
CG2:=GetGValue(Color2);
CB2:=GetBValue(Color2);
CR2:=CR1+x3*CR2;
CG2:=CG1+x3*CG2;
CB2:=CB1+x3*CB2;

CR3:=GetRValue(Color3);
CG3:=GetGValue(Color3);
CB3:=GetBValue(Color3);
CR3:=(1-x3)*CR3;
CG3:=(1-x3)*CG3;
CB3:=(1-x3)*CB3;

CR4:=GetRValue(Color4);
CG4:=GetGValue(Color4);
CB4:=GetBValue(Color4);
CR4:=CR3+x3*CR4;
CG4:=CG3+x3*CG4;
CB4:=CB3+x3*CB4;

CR:=round((1-y3)*CR2+y3*CR4);
CG:=round((1-y3)*CG2+y3*CG4);
CB:=round((1-y3)*CB2+y3*CB4);
应该很容易看懂 随便写的 没有优化过 见笑
 
还可以精确到小数啊??GZ。
 
不可以,不要花时间了.象素已经是原子了.
 
接受答案了.
 
努力学习
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部