未_定 2019-04-23 11:17 采纳率: 50%
浏览 321
已采纳

调用jpeg库解压多张图片,第一张图片正常,第二张图片出错

    int i, j,k;
    ICON_INFO *info;
    struct jpeg_decompress_struct cinfo;
    struct jpeg_error_mgr jerr;
    FILE * input_file;
    JDIMENSION num_scanlines;
    int row_stride;
    JSAMPARRAY buffer;
    unsigned char * dst_buffer;
    unsigned short *dst;
    unsigned char * src;
    /*jpeg decode for logo*/ 
    cinfo.err = jpeg_std_error(&jerr);
    jpeg_create_decompress(&cinfo);

    /* init icon */
    info = icon_info;
    j = sizeof(icon_info)/sizeof(icon_info[0]);
    printf("=======j=%d=====\n",j);
    for (i = 0; i < j; i++, info++)
    {
        printf("=======i=%d=====\n",i);
        printf(info->name);
        if ((input_file = fopen(info->name, "rb")) == NULL) {
            fprintf(stderr, "can't open %s\n",info->name);
            exit(EXIT_FAILURE);
        }

        /* Specify data source for decompression */
        jpeg_stdio_src(&cinfo, input_file);
        printf("************1\n");
        /* Read file header, set default decompression parameters */
        (void) jpeg_read_header(&cinfo, TRUE);
        printf("************2\n");
        /* Start decompressor */
        (void) jpeg_start_decompress(&cinfo);
        printf("************3\n");
        printf("cinfo.output_width:%d\n",cinfo.output_width);
        printf("cinfo.output_height:%d\n",cinfo.output_height);
        printf("cinfo.output_components:%d\n",cinfo.output_components);

        dst_buffer = malloc(cinfo.output_width*cinfo.output_height*(cinfo.output_components + 1));
        if(NULL == dst_buffer) {
            printf("failed to malloc for icon_logo.jpg \n");
            return -1;
        }
        dst = (unsigned short *)dst_buffer;
        icon_tbl[i] = (int)dst_buffer;

        row_stride = cinfo.output_width * cinfo.output_components;
        buffer = (*cinfo.mem->alloc_sarray)
            ((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
        /* Process data */

        while (cinfo.output_scanline < cinfo.output_height) {
            num_scanlines = jpeg_read_scanlines(&cinfo, buffer, 1);

            //argb8888
            src = (unsigned char *)buffer[0];
            for(k=0; k<cinfo.output_width; k++) {
                *dst_buffer = *(src + 2);
                *(dst_buffer + 1) = *(src + 1);
                *(dst_buffer + 2) = *src;
                src += 3;
                dst_buffer +=3;
                *dst_buffer++ = 0xE0;
            }


#endif
        }

        /*end jpeg decode */
    }

    (void) jpeg_finish_decompress(&cinfo);
    jpeg_destroy_decompress(&cinfo);

图片说明

出错是在图片说明

  • 写回答

2条回答 默认 最新

  • 未_定 2019-04-23 12:19
    关注

    是我没有关闭之前打开的文件以及没有调用结束解压的函数才会出这个问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 MATLAB APP 制作出现问题
  • ¥15 wannier复现图像时berry曲率极值点与高对称点严重偏移
  • ¥15 利用决策森林为什么会出现这样·的问题(关键词-情感分析)
  • ¥15 DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI[/untitled30_war_e
  • ¥15 使用deepspeed训练,发现想要训练的参数没有梯度
  • ¥15 寻找一块做为智能割草机的驱动板(标签-stm32|关键词-m3)
  • ¥15 信息管理系统的查找和排序
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),怎么用读取的电磁传感器信号表示小车所在的位置
  • ¥15 如何解决y_true和y_predict数据类型不匹配的问题(相关搜索:机器学习)
  • ¥15 PB中矩阵文本型数据的总计问题。