未_定 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 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)