[英]How to generate 24-bit RGB values “more gracefully”?
源文件:
/* gcc <filename.c> -o <filename> -std=c99 -Wall */
#include <stdio.h>
int main (void)
{
unsigned int RGB[8];
for (unsigned char Cnt = 1; Cnt < 8; Cnt++)
{
RGB[Cnt] = ((unsigned int)((6+Cnt)/7)) * (((unsigned int) 0xFF) << (8*((9-Cnt)%3)))
+ ((unsigned int) (Cnt/4)) * (((unsigned int) 0xFF) << (8*((8-Cnt)%3)))
+ ((unsigned int) (Cnt/7)) * ((unsigned int) 0xFF);
fprintf (stdout, "%06X\n", RGB[Cnt]);
}
}
输出:(顺序:R - > G - > B - > R + G - > G + B - > B + R - > R + G + B)
FF0000
00FF00
0000FF
FFFF00
00FFFF
FF00FF
FFFFFF
我想知道...
是否有更优雅的方法按上述顺序生成24位RGB值?
ISO C99中是否需要这些铸件?
在这种情况下,ISO C99中是否需要使用类型转换中的无符号符号?
谢谢。
简单的方法就是硬编码值,它很容易阅读。
无论如何,如果你想生成它们 - 这个变体既不快整数除法:
unsigned int RGB[7];
unsigned int values[] = {0, 0xff};
unsigned int rgbmask = 0x1EBC54; // binary 111101011110001010100
for (int i=0; i<7; i++)
{
RGB[i] = values[rgbmask>>2&1]<<16 | values[rgbmask>>1&1]<<8 | values[rgbmask&1];
rgbmask >>= 3;
printf ("%06X\n", RGB[i]);
}
可能不是你想看的东西,但这看起来好多了:
unsigned int RGB[8] = {
0x000000,
0xFF0000,
0x00FF00,
0x0000FF,
0xFFFF00,
0x00FFFF,
0xFF00FF,
0xFFFFFF
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.