RGB颜色系统可以通过组合红色,绿色和蓝色的不同色调来表示256种不同的颜色。每个阴影可以表示为数字。定义C类型以表示RGB状态。
根据我的理解,这将是一个合适的C类型,但不确定我是否正确:
struct{
int R[256];
int G[256];
int B[256];
} color;
这是正确的还是有更合适/更有效的方法呢?
答案 0 :(得分:2)
您只需要一个可以容纳三个值的结构,每个值都在0..255
范围内。你提出的结构保持3 * 256 * sizeof(int)= 768 * sizeof(int),太多了。请改用:
struct color {
unsigned char R;
unsigned char G;
unsigned char B;
};
请注意结构标识符color
的正确位置。
您可以在程序中进一步使用此结构,如下所示:
struct color bright_orange;
bright_orange.R = 255;
bright_orange.G = 128;
bright_orange.B = 0;
答案 1 :(得分:1)
数组字段是不必要的。单个int
可以保存0到255之间的值,因此足以表示每个阴影。但是,uint8_t
较小,并明确传达了所需的值范围:
#include <stdint.h> //Contains uint8_t
typedef struct color {
uint8_t R;
uint8_t G;
uint8_t B;
} color_t;
color_t very_red;
very_red.R = 255U;
very_red.G = 0U;
very_red.B = 0U;
请注意typedef
如何让您随后引用color_t
,而不必写struct color
。
答案 2 :(得分:0)
这是错误的。删除数组,然后在struct之后移动颜色。您尝试(使用错误的语法)创建一个颜色结构,其中包含大小为256的R,G和B数组(每个256个int值)。 struct Color { int R, int G, int B. };
顺便说一句:您只需要8位来处理R,G,B的256个状态。因此,与int相比,uint8_t(unsigned char)将是更好的候选者。
答案 3 :(得分:0)
一个int
是4个字节,因此3个int
占用12个字节。
如果你使用3 unsigned char
(每个只占1个字节),你可以节省75%的空间(如果我们不计算最终的填充)。
此处不需要数组。
此声明也是假的:“可以代表256种不同的颜色”它是256 * 256 * 256种颜色......