我對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