• 大小: 4KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-06-16
  • 语言: C/C++
  • 标签: jpeg  libjpeg  c  简单  

资源简介

纯C语言+libjpeg实现最简单jpeg图片解码显示程序

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include 
#include 
#include 

#include 
#include 
#include 
#include 


void write_lcd(char *p_lcd unsigned char *bmp_buffer
int width int height int pixel_size struct fb_var_screeninfo *vinfo);

void usage(const char *name)
{
fprintf(stderr “Usage: %s \n“ name);
exit(1);
}

unsigned long read_image_from_file(int fd unsigned char *jpg_buffer unsigned long jpg_size)
{
unsigned long nread = 0;
unsigned long total = 0;

while(jpg_size > 0)
{
nread = read(fd jpg_buffer jpg_size);

jpg_size -= nread;
jpg_buffer += nread;
total += nread;
}
close(fd);

return total;
}

int Stat(const char *filename struct stat *file_info)
{
int ret = stat(filename file_info);

if(ret == -1)
{
fprintf(stderr “[%d]: stat failed: %s\n“ __LINE__ strerror(errno));
exit(1);
}

return ret;
}

int Open(const char *filename int mode)
{
int fd = open(filename mode);
if(fd == -1)
{
fprintf(stderr “[%d]: open failed: %s\n“ __LINE__ strerror(errno));
exit(1);
}

return fd;
}

int main(int argc char **argv)
{
if(argc != 2)
{
usage(argv[0]);
}

struct stat file_info;
unsigned char *jpg_buffer;

// 声明解压缩结构体,以及错误管理结构体
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;

unsigned long bmp_size;
unsigned char *bmp_buffer;

// 读取图片文件属性信息,并根据其大小分配内存缓冲区
Stat(argv[1] &file_info);
int fd = Open(argv[1] O_RDONLY);

jpg_buffer = (unsigned char *)calloc(1 file_info.st_size);
read_image_from_file(fd jpg_buffer file_info.st_size);


// 使用缺省的出错处理来初始化解压缩结构体
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);

// 配置该cinfo,使其从jpg_buffer中读取jpg_size个字节
// 这些数据必须是完整的JPEG数据

评论

共有 条评论