这段代码试图将文件夹中的jpg文件转换成RGB数据后放入链表,其中存在以下问题:

  1. 未定义 dp 和 ep 变量,这可能导致编译错误。
  2. LINE 是一个未定义的宏,可能会导致编译错误。
  3. 在 load_img() 函数中,传递给 jpeg 参数的是文件名的指针,而不是文件的路径。这可能导致无法正确加载图片。
  4. 在 jpg2rgb() 函数中,传递给 jpgdata 参数的是指向 JPG 数据的指针,而不是文件名。这可能导致无法正确解码 JPG 数据。
  5. 在 new_node() 函数中,传递给 jpgdata 参数的是指向 JPG 数据的指针,而不是 RGB 数据。这可能导致链表中存储的数据不正确。
  6. 未定义 head 变量,这可能导致编译错误。
  7. 在 list_add_tail() 函数中,传递给 head 参数的是未定义的变量,这可能导致编译错误。

您可能需要根据实际情况进行适当的修改和补充。

解决方案:

  1. 定义 dp 和 ep 变量:
DIR *dp;
struct dirent *ep;
  1. 定义 LINE 宏:
#define LINE printf("%s:%d\n", __func__, __LINE__);
  1. 在 load_img() 函数中,将文件路径传递给 jpeg 参数:
char filename[256];
sprintf(filename, "%s/%s", dir_path, ep->d_name);
char *jpgdata = load_img(filename, &minfo);
  1. 在 jpg2rgb() 函数中,将指向 JPG 数据的指针传递给 jpgdata 参数:
jpg2rgb(jpgdata, minfo.img_size, &minfo);
  1. 在 new_node() 函数中,将指向 RGB 数据的指针传递给 jpgdata 参数:
node *new=new_node(minfo.rgb_data);
  1. 定义 head 变量:
node *head = NULL;
  1. 在 list_add_tail() 函数中,将 head 变量传递给 head 参数:
list_add_tail(head, new);

完整的代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>

// 图片信息结构体
struct img_info {
    int width;
    int height;
    int img_size;
    unsigned char *rgb_data;
};

// 链表节点结构体
struct node {
    unsigned char *rgb_data;
    struct node *next;
};

// 创建新节点
struct node *new_node(unsigned char *rgb_data) {
    struct node *new = (struct node *)malloc(sizeof(struct node));
    new->rgb_data = rgb_data;
    new->next = NULL;
    return new;
}

// 将链表节点添加到链表尾部
void list_add_tail(struct node **head, struct node *new) {
    if (*head == NULL) {
        *head = new;
        return;
    }
    struct node *cur = *head;
    while (cur->next != NULL) {
        cur = cur->next;
    }
    cur->next = new;
}

// 加载 JPG 图片
unsigned char *load_img(const char *filename, struct img_info *minfo) {
    // ... 实现加载 JPG 图片的逻辑 ...
    return minfo->rgb_data;
}

// 将 JPG 数据解码为 RGB
void jpg2rgb(unsigned char *jpgdata, int img_size, struct img_info *minfo) {
    // ... 实现 JPG 解码的逻辑 ...
}

int main() {
    DIR *dp;
    struct dirent *ep;
    char dir_path[] = "path/to/your/directory";
    node *head = NULL;

    dp = opendir(dir_path);
    if (dp == NULL) {
        perror("opendir() error");
        return 1;
    }

    while (1) {
        ep = readdir(dp);
        if (ep == NULL) {
            break;
        }
        if (ep->d_name[0] == '.') {
            continue;
        }
        if (strstr(ep->d_name, ".jpg")) {
            // 定义图片信息结构体
            struct img_info minfo;
            LINE;
            // 读取 JPG 图片
            char filename[256];
            sprintf(filename, "%s/%s", dir_path, ep->d_name);
            char *jpgdata = load_img(filename, &minfo);
            LINE;
            // 将 JPG 解码为 RGB
            jpg2rgb(jpgdata, minfo.img_size, &minfo);
            LINE;
            printf("jgpsize: %d\n", minfo.img_size);
            printf("jgp 尺寸: %d×%d\n", minfo.width, minfo.height);

            node *new = new_node(minfo.rgb_data);
            LINE;
            list_add_tail(&head, new);
            LINE;
        }
    }

    closedir(dp);
    return 0;
}

注意:

  • 代码中的 load_img() 和 jpg2rgb() 函数需要根据实际情况进行实现。
  • dir_path 变量需要替换为实际的文件夹路径。
  • 以上代码示例仅供参考,实际应用中可能需要根据具体需求进行调整。

原文地址: https://www.cveoy.top/t/topic/qoLW 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录