首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“不能隐式地将类型'double‘转换为’字节‘”

“不能隐式地将类型'double‘转换为’字节‘”
EN

Stack Overflow用户
提问于 2013-10-01 22:30:49
回答 3查看 2.8K关注 0票数 0

我试图将图像的红色值提高百分之五十。这是我的代码:

代码语言:javascript
运行
复制
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%,并保持蓝色和绿色不变。但这条线

代码语言:javascript
运行
复制
byte increase = c.R + c.R * 0.5;  //This line gives error

给了我一个错误说

代码语言:javascript
运行
复制
Cannot implicitly convert type 'double' to 'byte'. An explicit conversion exists (are you missing     
a cast?)    

我不能把双字节转换成字节?我在做什么看起来很明智,这里有什么问题吗?

谢谢

EN

Stack Overflow用户

发布于 2013-10-01 22:38:29

问题是,当你取一个字节(如c.R)并乘以一个双(例如0.5),结果是一个双(因为一个字节可能没有精确地保存结果)。然后,您尝试将其分配给一个字节,正如错误消息所述,不存在隐式转换,因此必须显式转换它。

这可以用这样的方法来完成

代码语言:javascript
运行
复制
byte increase = (byte)(c.R + c.R * 0.5);

另一个答案提醒我,这不会检查溢出,所以如果c.R超过170个,那么就会出现溢出问题。为了达到这个目的,你会想做一些像D斯坦利的Min技术。

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19127110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档