RGB颜色系统作为数据类型

时间:2014-04-03 21:47:09

标签: c

  

RGB颜色系统可以通过组合红色,绿色和蓝色的不同色调来表示256种不同的颜色。每个阴影可以表示为数字。定义C类型以表示RGB状态。

根据我的理解,这将是一个合适的C类型,但不确定我是否正确:

struct{
    int R[256];
    int G[256];
    int B[256];
} color;

这是正确的还是有更合适/更有效的方法呢?

4 个答案:

答案 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种颜色......