在Windows窗体中将int转换为Color
本文关键字:转换 Color int Windows 窗体 | 更新日期: 2023-09-27 17:58:59
行中有一个值等于-16777056,但如何将其强制转换为Color?
类似的东西:
Color = (Color) Convert.ToInt32(((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"]) })
颜色和数字之间的转换被称为颜色书写联觉,患有这种情况的人可以识别数字的颜色(甚至形状或"感觉")。然而,这里有一个棘手的问题,那就是它从未在计算机中被识别出来(只在人身上)。此外,这种情况通常是由于人的遗传,但在使用迷幻药后也有报道。虽然我永远不会建议使用非法药物,但我想给你的CPU塞一些LSD可能值得一试。
还有一个困难是,联觉者之间没有共同点——也就是说,数字6对我来说和对你来说颜色不一样。因此,这些在你的电脑上的渲染效果可能与在我的电脑上不同。(有点像"哇,伙计,我怎么知道对我来说"蓝色"的东西看起来不像我认为的"红色"对你来说?"但我们又回到了非法药物。)
这就是我将数字转换为颜色的方法。也就是说,除非你的数字实际上代表了一些有用的东西,比如ARGB颜色值。在这种情况下,您可以使用:
Color.FromArgb(numericValue);
试试这个:
var argb = Convert.ToInt32(
((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"]);
Color = Color.FromArgb(argb);
好吧,你知道颜色最初是如何变成那个整数的吗?我的猜测是,它是一个由串联字节组成的ARGB值。
如果是这样,这是最简单的方法:
var myColor = Color.FromArgb(myColorInt);
它会被集成到你的实际代码行中,比如:
var myColor = Color.FromArgb(Convert.ToInt32(((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"]) }));
Color myColor = Color.FromArgb(Convert.ToInt32(((DataRowView)
this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"])});
编辑:在阅读了您上面的一条评论后,您可能可以稍微简化一下所有内容。尝试分配所选颜色,如下所示:
((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"] =
colorDialog.Color;
然后像这样读出来:
Color myColor =
((DataRowView)this.dataGridView1.Rows[e.RowIndex].DataBoundItem)["Color"];
通过这种方式,您可以将其保存为Color
,并将其检索为Color
,并跳过中间转换步骤。
这可能适用于也可能不适用于其他一些修改,具体取决于数据源是否存储Color
而不是当前定义的int
。
您不能使用此
Color color = System.Drawing.Color.FromArgb(0xFFAABBCC);
因为输入参数是int,并且0xFFAABBCC在int 的范围之外
你已经使用了这个
Color color = System.Drawing.Color.FromArgb(0xFF, System.Drawing.Color.FromArgb(0xAABBCC));
或者在您的项目中创建此函数。
Color color = GetColor(0xFFAABBCC);
public static Color GetColor(uint color) {
return Color.FromArgb((byte) ((color >> 24) & 0xFF), (byte) ((color >> 16) & 0xFF), (byte) ((color >> 8) & 0xFF), (byte) (color & 0xFF));
}
使用此函数:
System.Drawing.Color LongToColor(long colorNumber)
{
int a = Int32.Parse(((colorNumber & 0xFF000000L) >> 24).ToString());
int r = Int32.Parse(((colorNumber & 0x00FF0000L) >> 16).ToString());
int g = Int32.Parse(((colorNumber & 0x0000FF00L) >> 8).ToString());
int b = Int32.Parse((colorNumber & 0x000000FFL).ToString());
return System.Drawing.Color.FromArgb(a, r, g, b);
}
示例
var redColor = LongToColor(0x00FF0000);
var greenColor = LongToColor(0x0000FF00);
var blueColor = LongToColor(0x000000FF);
var other = LongToColor(0xBBABCDEF);
Console.WriteLine(redColor);
//Color [A=0, R=255, G=0, B=0]
Console.WriteLine(greenColor);
//Color [A=0, R=0, G=255, B=0]
Console.WriteLine(blueColor);
//Color [A=0, R=0, G=0, B=255]
Console.WriteLine(other);
//Color [A=187, R=171, G=205, B=239]