由于试图使颜色饱和的数据类型范围有限,比较总是错误的

标签 c colors warnings compiler-warnings mandelbrot

我正在尝试使颜色饱和并确保它们不会溢出 这样他们就能画出漂亮的 Mandlebrot 集,而不会被像素化。 我正在使用 Altera DE2 板尝试通过 VGA 连接到计算机屏幕来打印此 Mandlebrot 集,但颜色略有偏差(像素化)。

如何更正下面代码中的 if 语句,使其不总是错误?

if (iteration == 500)
{
    alt_up_pixel_buffer_dma_draw(my_pixel_buffer,0,0,0);
}
else
{
    //double z = sqrt(xtemp * xtemp + y * y);
    //int brightness = 256. * log2(1.75 + i - log2(log2(z))) / log2(500);
    //color(brightness, brightness, 255);
    //color is some function of iteration
    alt_u8 Red = (iteration*8);///zoom);
    if(Red > 255) // this if statement is always false
        Red = 255;

    alt_u8 Green = (iteration*4);///zoom);
    if(Green > 255) // this if statement is always false
        Green = 255;

    alt_u8 Blue = (iteration*2);///zoom);
    if(Blue > 255) // this if statement is always false
        Blue = 255;

    //draw the pixels
    alt_up_pixel_buffer_dma_draw(my_pixel_buffer, (Blue) + (Green<<8) + (Red<<16),j,i);
}

最佳答案

您需要使用更大的整数来获得乘法结果,以便您可以测试是否超出限制。

alt_u8 Red;
uint16_t tempRed = iteration * 8;
if (tempRed > 255) {
    Red = 255;
} else {
    Red = tempRed;
}

关于由于试图使颜色饱和的数据类型范围有限,比较总是错误的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36658413/

相关文章:

c# - 如何将字符串转换为颜色?对于 Windows Phone C#

c# - 如何从种子中生成随机的人类可读颜色? C#

java - 在 IntelliJ 中为一行禁用警告

ios - Apple Developer - 配置文件显示无效状态

XCode 6.3 警告 : synthesize property

c - 结构不适用于多个 C 源文件

c - 将内联函数放在 C 头文件中是错误的吗?

css - WordPress 链接悬停颜色

c - 在 C 中的结构上使用 malloc 后,数组中的默认值是多少

c - C(Linux) 中的套接字 - 如何获取客户端 IP 和端口