【发布时间】:2018-05-26 16:14:42
【问题描述】:
我正在使用 C 语言开发一个小型图像处理库。
我想将图像表示为可以具有不同类型的像素数组:uint8_t(对于最大值不超过 255 的像素)、uint16_t(相同但最大值为 65535)、uint32_t..
我暂时先这样做:
typedef struct img8_t {
unsigned int width, height, depth;
size_t dsize;
uint8_t *data;
}img8_t;
typedef struct img16_t {
unsigned int width, height, depth;
size_t dsize;
uint16_t *data;
}img16_t;
typedef struct img32_t {
unsigned int width, height, depth;
size_t dsize;
uint32_t *data;
}img32_t;
dsize 包含像素数据类型的大小
而且我有相同数量的函数来分配/解除分配和处理这些图像。
有没有办法定义一个通用的“unsigned int”类型,可以处理 8 位、16 位等的值,而无需为每种情况创建结构/函数?
我应该使用联合吗?
感谢您的帮助!
【问题讨论】:
-
你有一个指向数据的指针。使用通用指针类型:
void *。而且...您始终可以对其中的每一个使用uint32_t,这只会浪费一些内存:D -
感谢您的快速回答!是的,我尝试了 void * 解决方案,但如果我想访问给定索引处的像素,我仍然需要一个数据类型来转换数据。正如你所说,我也可以使用 uint32_t,但我想根据像素最大值使用适当的数据类型。再次感谢!
-
关于图像格式:
width, height, depth的范围通常由格式指定。我建议这些成员也使用uintN_t。