DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: sy1012
今日帖子: 9
在线用户: 36
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2024/5/6 21:55:59
标题:
请教颜色问题:RGB 转 HSL,Hue 值不正确 浏览:202
加入我的收藏
楼主: 代码如下:
uses 
  System.UIConsts;

procedure TForm1.Button3Click(Sender: TObject);
var
  H, S, L: Single;
begin
  var R := 157;
  var G := 157;
  var B := 152;

  var alc := MakeColor(R, G, B, 255);

  RGBtoHSL(alc, H, S, L);

  //https://www.rapidtables.com/convert/color/rgb-to-hsl.html
  //以上网址可得到 HSL: 60,2.5,60.6 <--正确值
  ShowMessage(Format('HSL: %.1f,%.1f,%.1f', [H, S * 100, L * 100])); //<---错误 Hue 值:0.2
end;

请问各位高手,Hue 还要怎么计算,才能与上面网站算出来的一致?
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
2024/5/7 1:10:09
1楼: 那就看你的 RGBtoHSL 这个函数里面是怎么回事了。
----------------------------------------------
-
作者:
男 sail2000 (小帆工作室) ★☆☆☆☆ -
盒子活跃会员
2024/5/7 8:21:47
2楼: 已解决,解决方法请移步我在StackOverflow的同题提问:
https://stackoverflow.com/questions/78437186/delphi-rgb-to-hsl-incorrect/78437267#78437267
----------------------------------------------
delphi 是兴趣,和工作无关,即使它倒闭。又不靠它 delphi 吃饭,怕甚?
作者:
男 aminghanhua (阿明) ▲▲▲▲▲ -
普通会员
2024/5/7 17:07:12
3楼: procedure TForm1.Button1Click(Sender: TObject);
var
  H, S, L: Single;
  R, G, B: Byte;
  alc: TAlphaColor;
begin
   R := Byte( StrToInt(Edit1.Text) );
   G := Byte( StrToInt(Edit2.Text) );
   B := Byte( StrToInt(Edit3.Text) );
   alc := MakeColor(R, G, B, 255);
   RGBtoHSL(alc, H, S, L);
   Edit4.Text :=FloatToStr( 360 * H );
   Edit5.Text :=FloatToStr( S * 100 );
   Edit6.Text :=FloatToStr( L * 100 );
end;
此帖子包含附件:
PNG 图像
大小:52.0K
----------------------------------------------
-
作者:
男 hz_2009 (盒子) ★☆☆☆☆ -
普通会员
2024/5/8 17:41:11
4楼: // ----------
// 把TAlphaColor转换为HSL    
void __fastcall AlphaColorToHSL(TAlphaColor aColor, float &fH, float &fS, float &fL)
{
  // void __fastcall RGBtoHSL(System::Uitypes::TAlphaColor RGB,  float &H,  float &S,  float &L);
  RGBtoHSL(aColor, fH, fS, fL);

  fH = fH * 360.0; // 其值在0-1.0之间,所以要转换
  fS = fS * 100.0; // 其值在0-1.0之间,所以要转换
  fL = fL * 100.0; // 其值在0-1.0之间,所以要转换
}
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行70.3125毫秒 RSS