C# 我不知道如何从';浮动';至';int';
我正在学习编程,我被这个错误困扰了很长时间 我试着把变量改成浮动C# 我不知道如何从';浮动';至';int';,c#,visual-studio,C#,Visual Studio,我正在学习编程,我被这个错误困扰了很长时间 我试着把变量改成浮动 Color col; float red, green, blue,gray; for (int i = 0; i < oImage.Width; i++) for (int j = 0; j < oImage.Height; j++) { col = oImage.GetPixel(i,
Color col;
float red, green, blue,gray;
for (int i = 0; i < oImage.Width; i++)
for (int j = 0; j < oImage.Height; j++)
{
col = oImage.GetPixel(i, j);
red = col.R;
green = col.G;
blue = col.B;
gray = red*0.21 + green*0.72 + blue*0.07;
oImage.SetPixel(i, j, Color.FromArgb(gray, gray, gray));
}
picImage.Refresh();
Color;
漂浮着红、绿、蓝、灰;
对于(int i=0;i
我希望输出是将普通照片转换为亮度背景
gray = red*0.21 + green*0.72 + blue*0.07;
....
oImage.SetPixel(i, j, Color.FromArgb(gray, gray, gray));
与
被识别为双精度。如果添加一个0.21
,它会将该值标记为f
float
- float可以转换为
,因此int
起作用(int)myFloatValue
设置为灰色
a字节
,并将公式显式转换为字节
byte gray = (byte) (red*0.21 + green*0.72 + blue*0.07);
请注意对传递给的值的限制
(…)尽管此方法允许为每个颜色分量传递32位值,但每个分量的值限制为8位
注1<代码>字节,
浮动
,双倍
,和整数
您将红色
,绿色
,蓝色
声明为浮动
s,实际上它们是字节
它们不需要是浮点数
,因为浮点数
/双精度
*一个字节
变成浮点数
/双精度
考虑以下代码段
Color col = Color.FromKnownColor(KnownColor.Salmon);
var red = col.R;
var xR = 0.21;
var grayR = col.R*xR;
这张照片
'red' is System.Byte: 250
'xR' is System.Double: 0.21
'grayR' is System.Double: 52.5
附注2。较少变量
通过直接在公式中使用RGB值,可以简化代码
Color col = Color.FromKnownColor(KnownColor.Salmon);
byte gray = (byte) (col.R*0.21 + col.G*0.72 + col.B*0.07);
Color c2 = Color.FromArgb(gray, gray, gray);
可能的重复对于不经意的读者来说,最好知道哪里出了问题:你有没有遇到编译器错误?你有运行时错误吗?还是程序编译并运行但没有产生预期的结果?我也不赞成那些容易被谷歌搜索到的问题。当我在谷歌上搜索“c#convert float to int”时,我得到了许多有用的答案。其中(公认排名12)是:“任何两种数值类型之间都存在转换,无论是隐式还是显式。必须使用cast运算符()来调用显式转换。”。。。“显式数字转换:…从浮点到sbyte、byte、short、ushort、int、uint、long、ulong或decimal”。@tymtam在调用
FromArgb
时,我将灰色
转换为int
。绿色*0.72
也会给出一个编译器错误,这就是我提到这两个错误的原因。为什么要使文本浮动?好处是什么?非常感谢。我的错误是“无法隐式地将类型‘double’转换为‘float’”。我将变量改为double而不是float。我这样做是“oImage.SetPixel(i,j,Color.FromArgb((int)gray,(int)gray,(int)gray,(int)gray));”它可以解决我的问题,谢谢
Color col = Color.FromKnownColor(KnownColor.Salmon);
byte gray = (byte) (col.R*0.21 + col.G*0.72 + col.B*0.07);
Color c2 = Color.FromArgb(gray, gray, gray);