⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jpeg.c

📁 SMDK2410开发板LINUX下的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 + -