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

调用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条)

报告相同问题?

悬赏问题

  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制