我试图将图像的红色值提高百分之五十。这是我的代码:
public static Bitmap IncreaseRedFiftyPercent(Bitmap b)
{
Bitmap temp = (Bitmap) b;
Bitmap bmap = (Bitmap)temp.Clone();
Color c;
for (int i = 0; i < bmap.Width; i++)
{
for (int j = 0; j < bmap.Height; j++)
{
c = bmap.GetPixel(i, j);
byte increase = c.R + c.R * 0.5; //This line gives error
bmap.SetPixel(i, j, Color.FromArgb(increase, c.G, c.B));
}
}
b = (Bitmap)bmap.Clone();
return b;
}下面是我所做的工作:我读取图片的所有像素,并将红色值增加50%,并保持蓝色和绿色不变。但这条线
byte increase = c.R + c.R * 0.5; //This line gives error给了我一个错误说
Cannot implicitly convert type 'double' to 'byte'. An explicit conversion exists (are you missing
a cast?) 我不能把双字节转换成字节?我在做什么看起来很明智,这里有什么问题吗?
谢谢
发布于 2013-10-01 22:38:29
问题是,当你取一个字节(如c.R)并乘以一个双(例如0.5),结果是一个双(因为一个字节可能没有精确地保存结果)。然后,您尝试将其分配给一个字节,正如错误消息所述,不存在隐式转换,因此必须显式转换它。
这可以用这样的方法来完成
byte increase = (byte)(c.R + c.R * 0.5);另一个答案提醒我,这不会检查溢出,所以如果c.R超过170个,那么就会出现溢出问题。为了达到这个目的,你会想做一些像D斯坦利的Min技术。
https://stackoverflow.com/questions/19127110
复制相似问题