gpt4 book ai didi

c - 我怎样才能将我的数据从我的缓冲区中获取到这个结构中?

转载 作者:太空宇宙 更新时间:2023-11-04 07:27:06 25 4
gpt4 key购买 nike

我正在尝试将包含字符的缓冲区中的数据复制到结构中。缓冲区仅包含结构的蓝色、绿色和红色成员的数据 - alpha 将设置为零。代码如下,但我似乎无法弄清楚循环。

   typedef struct __attribute__((packed)){
uint8_t blue;
uint8_t green;
uint8_t red;
uint8_t alpha;
} rgb_pixel_t;

int i, j;
char *buffer;
buffer = malloc(sizeof(rgb_pixel_t) * bmp->dib.width);

bmp_malloc_pixels(bmp);
rgb_pixel_t pixel = {42, 42, 42, 0};

fseek(fp, bmp->header.offset, SEEK_SET);
fread(buffer, sizeof(char), ((bmp->dib.depth / 8) * bmp->dib.width), fp);

for(i = 0; i < 600; ++i) {
for(j = 0; j < 400; ++j) {
bmp_set_pixel(bmp, i, j, pixel); // This isn't right.
}
}

最佳答案

不要那样做。不是使用 char 缓冲区,而是使用 rgb_pixel_t 缓冲区,然后读入:

rgb_pixel_t *pixels = malloc(sizeof(rgb_pixel_t) * bmp->dib.width);

/* ... */

size_t pixels_to_read = bmp->dib.depth / 8 * bmp->dib.width / sizeof(rgb_pixel_t);
fread(pixels, sizeof(rgb_pixel_t), pixels_to_read, fp);

/* ... */

Drew McGowen 所述在评论中,如果位图数据没有 alpha channel ,这当然不起作用。此外,有些图像的每像素位数较少,或者根本没有 RGB 数据(而是有颜色表的索引,通常是 256 色或更少的图像)。

您可能希望找到一个可以为您处理所有这些的库,并提供与格式无关的 API 供您使用,而不必自己处理原始图像数据。

关于c - 我怎样才能将我的数据从我的缓冲区中获取到这个结构中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17387014/

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