gpt4 book ai didi

c - 十六进制颜色代码到 RGB 数字

转载 作者:行者123 更新时间:2023-11-30 15:12:10 24 4
gpt4 key购买 nike

我不知道该怎么做。我有一个带有颜色名称或十六进制代码 (#ffffff) 的字符数组,它没有向 main 返回正确的 RGB 值,也没有通过“#”来读取 6 个十六进制数字。我真的很生疏,大约一年没有编码了,所以请批评你看到的任何东西。

/**readColor()
Converts the decimal values, color name or hex value read from
the input stream to the 3 byte RGB field

Returns the rgb values if successful. On error prints errmsg and
exits.
**/
color_t readColor(FILE *infile, char *errmsg)
{
int rc, red, green, blue;
char alpha[7] = {};
int i=0;

rc = fscanf(infile, "%d %d %d\n", &red, &green, &blue);
if(rc == 3){
if(red>=0 && red<=255 && green>=0 && green<=255 && blue>=0 && blue<=255){
return((color_t){red, green, blue});
}

}
if (rc != 0){
printf("%s", errmsg);
return((color_t){0,0,0});
}


fgets(alpha, 10, infile);
fputs(alpha);

i=0;
if(strcmp(alpha, "white")==0){
return((color_t){255, 255, 255 });
}
else if(strcmp(alpha, "red")==0){
return((color_t){255, 0, 0});
}
else if(strcmp(alpha, "blue")==0){
return((color_t){0, 0, 255});
}
else if(strcmp(alpha, "purple")==0){
return((color_t){128, 0, 255});
}
else if(strcmp(alpha, "black")==0){
return((color_t){0, 0, 0});
}
else if(strcmp(alpha, "green")==0){
return((color_t){0, 255, 0});
}
else if(strcmp(alpha, "orange")==0){
return((color_t){255, 128, 0});
}
else if(strcmp(alpha, "yellow")==0){
return((color_t){255, 255, 0});
}
else if(alpha[0] == "#"){
alpha++;
if(sscanf(alpha, "%2x%2x%2x", &red, &green, &blue)!= 3){
printf("%s", errmsg);
}
else{
return((color_t){red, green, blue});
}
}
else{
printf("%s", errmsg);
}

return((color_t){0, 0, 0});
}

最佳答案

您可以使用%x格式说明符读取十六进制值。如果 0 填充宽度为 2,则无需进行范围测试。 例如

int r, g, b;
if( 3 == scanf( "#%02x%02x%02x", &r, &g, &b ) )
{
printf( "Red : %3d (%02x)\n", r, r );
printf( "Green : %3d (%02x)\n", g, g );
printf( "Blue : %3d (%02x)\n", b, b );
}

关于c - 十六进制颜色代码到 RGB 数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35214984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com