有关delphi和html中的色彩对应关系,有谁知道是怎么回事吗? (50分)

  • 主题发起人 主题发起人 base7
  • 开始时间 开始时间
B

base7

Unregistered / Unconfirmed
GUEST, unregistred user!
已知象素点在canvas中的位置,求给定范围内的平均颜色,我写了这样一个函数:
代码:
function TForm1.GetAvgColor(ABitmap: TBitmap; X, Y, Ranger: Integer): TColor;
var
  I, J: Integer;
  Red, Green, Blue: Integer;
  MyColor: TColor;
begin
  Red := 0;
  Green := 0;
  Blue := 0;
  for I:= Y - Ranger to Y + Ranger do
  begin
    for J:= X - Ranger to X + Ranger do
    begin
      MyColor := ABitmap.Canvas.Pixels[J, I];
      Red := GetRValue(MyColor) + Red;
      Green := GetGValue(MyColor) + Green;
      Blue := GetBValue(MyColor) + Blue;
    end;
  end;
  Result := Trunc(Red/(sqr(Ranger * 2) + 1) * 65536 + Green/(sqr(Ranger * 2) + 1) * 256
    + Blue/(sqr(Ranger * 2) + 1));
end;
可是出来之后的色彩惨不忍睹,完全变样了,大侠们能帮我看看吗? 3x
还有,如何把一个Tcolor转换成一个十六进制的文本?
是不是一个inttohex就可以了?我用了一下,好像不对...
 
use RGB() function?
Result := RGB(r,g,b).
 
to cony:
照你的修改了,依然惨不忍睹(不过稍微好点,呵呵)
 
edit1.text:=inttohex(panel1.color,6);
后面6代有要转成几位
 
大概找到惨不忍睹的原因了,
delphi中的十六进制表示的颜色和HTML中的颜色表示不一样
刚才试了一下,$512CBE在delphi中表示洋红色,而html中成了深蓝色了
谁有这方面的资料吗?
 
try below functions to convert Hex to TColor and TColor to Hex.

function TColorToHex(Color : TColor) : string;
begin
Result :=
IntToHex(GetRValue(Color), 2) +
IntToHex(GetGValue(Color), 2) +
IntToHex(GetBValue(Color), 2);
end;

function HexToTColor(sColor : string) : TColor;
begin
Result :=
RGB(
StrToInt('$'+Copy(sColor, 1, 2)),
StrToInt('$'+Copy(sColor, 3, 2)),
StrToInt('$'+Copy(sColor, 5, 2))
);
end;
 
HTML is rgb
TColor is GBR,haha!

一个TCOLOR($3F3E3D),转成HTML的就是3D3F3E.

你再试试.
 
颜色定义的顺序相反
Html: #123456
Delphi: $00563412
 
Delphi中颜色按BGR排列的
HTML中是RGB,顺序不一样
 
多人接受答案了。
 
后退
顶部