我对C非常陌生,我正在编写Ruby C扩展。其中一个函数应该计算两种颜色之间的平淡。 Color
结构使用char
来存储RGB值。混合比率为0.034和1.0之间的double
。混合char和double的算术运算的潜在问题?
在我这里完成的操作中混入char
和double
是不好的做法吗?会有潜在的问题吗?
我猜测,如果体重是不是0.0和1.0之间的可能的问题,因为它可能导致比0小于或大于255
我应该明确地铸造类型大的价值吗?
typedef struct Color Color;
static struct Color {
unsigned char red, green, blue, alpha;
};
static Color
color_blend( Color color1, Color color2, double weight)
{
Color color3 = { 0, 0, 0, 0 };
color3.red = (1 - weight) * color1.red + (weight * color2.red);
color3.green = (1 - weight) * color1.green + (weight * color2.green);
color3.blue = (1 - weight) * color1.blue + (weight * color2.blue);
color3.alpha = (1 - weight) * color1.alpha + (weight * color2.alpha);
return color3;
}
右侧表达式被“提升”为“double”,然后在分配时转换回“byte”。要回答的问题是:这可能会丢失信息吗? – vulkanino 2012-03-07 12:01:19