📄 jpeg.c
字号:
/* * JoTV - Video Streaming Systems * * jpeg.c - output image to the jpeg files * (c) 2001 Jollen <jollen@o3.net> */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <time.h>#include <fcntl.h>#include <unistd.h>#include <ctype.h>#include <jpeglib.h>#include <jerror.h>#include <jconfig.h>#include <pthread.h>#include <sys/param.h>#include <sys/types.h>int read_jpeg(const char *filename, int *width, int *height, unsigned char **rgb){ struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; unsigned char *ptr = NULL; int i, ipos; FILE *infile; if ((infile = fopen(filename, "rb")) == NULL) { fprintf(stderr, "Cannot open input JPEG file: %s\n", filename); return -1; } cinfo.err = jpeg_std_error(&jerr); jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, infile); jpeg_read_header(&cinfo, TRUE); jpeg_start_decompress(&cinfo); *width = cinfo.output_width; *height = cinfo.output_height; *rgb = malloc(3 * cinfo.output_width * cinfo.output_height); if ((*rgb) == NULL) { fprintf(stderr, "Cannot allocate memory for JPEG file.\n"); fclose(infile); return -1; } if (cinfo.output_components == 3) { ptr = (*rgb); while (cinfo.output_scanline < cinfo.output_height) { jpeg_read_scanlines(&cinfo, &ptr, 1); ptr += 3 * cinfo.output_width; } } else if (cinfo.output_components == 1) { ptr = malloc(cinfo.output_width); if (ptr == NULL) { fprintf(stderr, "Cannot allocate memory for JPEG file.\n"); fclose(infile); return -1; } ipos = 0; while (cinfo.output_scanline < cinfo.output_height) { jpeg_read_scanlines(&cinfo, &ptr, 1); for (i = 0; i < cinfo.output_width; i++) { memset((*rgb) + ipos, ptr[i], 3); ipos += 3; } } free(ptr); } jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); fclose(infile); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -