使十六进制颜色变亮或变暗
Lighten or darken a hex color
我正试图将这段Javascript转换为VB.net代码,并且我有一些麻烦让它工作。所有JS做的是一些数学/字节操作,所以我不认为我超出了这两种语言的范围。这里是原始代码,来源:
皮条客的颜色阴影代码
function shadeColor2(color, percent) {
var f=parseInt(color.slice(1),16),t=percent<0?0:255,p=percent<0?percent*-1:percent,R=f>>16,G=f>>8&0x00FF,B=f&0x0000FF;
return "#"+(0x1000000+(Math.round((t-R)*p)+R)*0x10000+(Math.round((t-G)*p)+G)*0x100+(Math.round((t-B)*p)+B)).toString(16).slice(1);}
下面是我试图转换成的格式:
Public Function LightColor(color As String, percent As Integer) As Color
Dim f As Integer = Convert.ToInt32(color.Substring(1), 16)
Dim t As Integer
If percent < 0 Then
t = 0
Else
t = 255
End If
Dim p As Integer
If percent < 0 Then
p = percent * -1
Else
p = percent
End If
Dim R As Integer = f >> 16
Dim G As Integer = f >> 8 And &HFF
Dim B As Integer = f And &HFF
Dim finalColor As String = "#" + (Convert.ToString( _
(&H1000000 + (Math.Round((t - R) * p) + R) * &H10000 + _
(Math.Round((t - G) * p) + G) * &H100 + _
(Math.Round((t - B) * p) + B))) _
).Substring(1)
Me.txtID.Text = finalColor
Return ColorTranslator.FromHtml(finalColor)
End Function
我会非常感谢一些帮助关于我的业余转换和它是否可以工作,我已经研究了相关的JS语法,但我不确定我是否正确地改变了它。在使用这些参数运行我的代码后:
LightColor("#2980b9", 20)
我获得了一个8位十六进制颜色(#00642865),这甚至不是一个颜色-我认为我有一些十六进制输出格式的问题。
我不太确定您的代码失败的原因,但我确实看到了一些潜在的缺陷。最明显的是percent
参数。这应该是double
或single
,因为可接受的范围是>= -1.0
和<= +1.0
。
我已经创建了一个简单的。net提琴,可在这里:https://dotnetfiddle.net/QhowPP
Public Shared Function LightColor(htmlColor As String, percent As Double) As Color
If (String.IsNullOrEmpty(htmlColor)) Then
Throw New ArgumentNullException("htmlColor")
ElseIf ((percent < -1D) Or (percent > +1D)) Then
Throw New ArgumentOutOfRangeException("percent")
End If
Dim c = ColorTranslator.FromHtml(htmlColor)
Dim f = Int32.Parse(htmlColor.Substring(1), Globalization.NumberStyles.AllowHexSpecifier)
Dim t = If((percent < 0), 0, 255)
Dim p = If((percent < 0), (percent * -1), percent)
Dim result = ("#" & CInt(
&H1000000 + (Math.Round((t - c.R) * p) + c.R) *
&H10000 + (Math.Round((t - c.G) * p) + c.G) *
&H100 + (Math.Round((t - c.B) * p) + c.B)
).ToString("X").Substring(1))
Return ColorTranslator.FromHtml(result)
End Function
c#: public static Color LightColor(String htmlColor, Double percent)
{
if (String.IsNullOrEmpty(htmlColor))
{
throw new ArgumentNullException("htmlColor");
}
else if ((percent < -1D) | (percent > +1D))
{
throw new ArgumentOutOfRangeException("percent");
}
var c = ColorTranslator.FromHtml(htmlColor);
var f = Int32.Parse(htmlColor.Substring(1), System.Globalization.NumberStyles.AllowHexSpecifier);
var t = ((percent < 0) ? 0 : 255);
var p = ((percent < 0) ? (percent * -1) : percent);
var result = ("#" + ((Int32)(
0x1000000 + (Math.Round((t - c.R) * p) + c.R) *
0x10000 + (Math.Round((t - c.G) * p) + c.G) *
0x100 + (Math.Round((t - c.B) * p) + c.B)
)).ToString("X").Substring(1));
return ColorTranslator.FromHtml(result);
}
相关文章:
- 如何检查十六进制颜色是否为“”;太黑”;
- javascript:搜索并用不同的颜色代码替换十六进制颜色代码
- 显示所选随机颜色的十六进制
- html5画布支持带alpha的十六进制颜色吗
- 以递增的渐变对十六进制颜色代码进行排序
- Extjs 6.0 颜色选择器十六进制字段
- 如何将透明度信息添加到十六进制颜色代码
- 如何在 jquery 颜色选择器中设置数字十六进制颜色
- 有没有一行 javascript 可以将每个十六进制颜色更改为不同的十六进制颜色
- 转换颜色十六进制值以用于三个 JSON 文件.js
- 如何从 javascript 中的 css 颜色名称中获取 rgb(或十六进制)代码
- 在悬停/单击时获取图像中颜色的十六进制代码
- 实时颜色选择器 HSV 到十六进制字符串
- JavaScriptforeach循环遍历一个十六进制值数组,使用setTimeout循环遍历背景颜色
- 将方框背景颜色更改为取自数据库的相等十六进制
- Regexp匹配十六进制颜色语法(和缩写形式)
- Javascript解析页面以查找十六进制颜色值
- 转换css系统颜色十六进制与javascript
- 为PaintJS插件传递动态颜色十六进制值data-pb- Color - Color
- 序列化JSON颜色十六进制没有引号