当前位置: 首页 > news >正文

进行jpeg库的移植之后,参照example.c编写的main函数,已编译通过

需要先下载JPEG库,Linux上进行配置生成lib,include等文件才可使用

屏幕截图 2025-08-07 170654

/****************************************************************************** file name: 2025-08-1_jepgmain.c* author   : 15515376695@163.com* date     : 2025-08-1* function : 该程序为main.c搭配jepg库可实现jepg图片信息的读取,且显示在lcd屏幕上* note     : None* CopyRight (c)   2025  15515376695@163.com   Right Reseverd*****************************************************************************/#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/mman.h>
#include "jpeglib.h"
#include <setjmp.h>
int * lcd_mp;
int read_JPEG_file (char * filename,int start_x,int start_y)
{/* This struct contains the JPEG decompression parameters and pointers to* working space (which is allocated as needed by the JPEG library).*/struct jpeg_decompress_struct cinfo;/* We use our private extension JPEG error handler.* Note that this struct must live as long as the main JPEG parameter* struct, to avoid dangling-pointer problems.*/struct jpeg_error_mgr jerr;/* More stuff */FILE * infile;		/* source file */unsigned char *  buffer;		/* Output row buffer */int row_stride;		/* physical row width in output buffer *//* In this example we want to open the input file before doing anything else,* so that the setjmp() error recovery below can assume the file is open.* VERY IMPORTANT: use "b" option to fopen() if you are on a machine that* requires it in order to read binary files.*/if ((infile = fopen(filename, "rb")) == NULL) {fprintf(stderr, "can't open %s\n", filename);return 0;}/* Step 1: allocate and initialize JPEG decompression object *//* We set up the normal JPEG error routines, then override error_exit. */cinfo.err = jpeg_std_error(&jerr);/* Now we can initialize the JPEG decompression object. */jpeg_create_decompress(&cinfo);/* Step 2: specify data source (eg, a file) */jpeg_stdio_src(&cinfo, infile);/* Step 3: read file parameters with jpeg_read_header() */(void) jpeg_read_header(&cinfo, TRUE);/* We can ignore the return value from jpeg_read_header since*   (a) suspension is not possible with the stdio data source, and*   (b) we passed TRUE to reject a tables-only JPEG file as an error.* See libjpeg.txt for more info.*//* Step 4: set parameters for decompression *//* In this example, we don't need to change any of the defaults set by* jpeg_read_header(), so we do nothing here.*//* Step 5: Start decompressor */(void) jpeg_start_decompress(&cinfo);/* We can ignore the return value since suspension is not possible* with the stdio data source.*//* We may need to do some setup of our own at this point before reading* the data.  After jpeg_start_decompress() we have the correct scaled* output image dimensions available, as well as the output colormap* if we asked for color quantization.* In this example, we need to make an output work buffer of the right size.*/ /* JSAMPLEs per row in output buffer */row_stride = cinfo.output_width * cinfo.output_components;//计算一行的大小/* Make a one-row-high sample array that will go away when done with image */buffer =calloc(1,row_stride);/* Step 6: while (scan lines remain to be read) *//*           jpeg_read_scanlines(...); *//* Here we use the library's state variable cinfo.output_scanline as the* loop counter, so that we don't have to keep track ourselves.*/int data = 0;while (cinfo.output_scanline < cinfo.output_height) {/* jpeg_read_scanlines expects an array of pointers to scanlines.* Here the array is only one element long, but you could ask for* more than one scanline at a time if that's more convenient.*/(void) jpeg_read_scanlines(&cinfo, &buffer, 1);for (int i = 0; i < cinfo.output_width; ++i){data |= 0xFF << 24;data |= buffer[3*i]<<16;     //Rdata |= buffer[3*i+1]<<8;  //Gdata |= buffer[3*i+2];   //Blcd_mp[800*(start_y-1)+start_x+800*(cinfo.output_scanline-1)+i] = data;data = 0; }}/* Step 7: Finish decompression */(void) jpeg_finish_decompress(&cinfo);/* We can ignore the return value since suspension is not possible* with the stdio data source.*//* Step 8: Release JPEG decompression object *//* This is an important step since it will release a good deal of memory. */jpeg_destroy_decompress(&cinfo);/* After finish_decompress, we can close the input file.* Here we postpone it until after no more JPEG errors are possible,* so as to simplify the setjmp error logic above.  (Actually, I don't* think that jpeg_destroy can do an error exit, but why assume anything...)*/fclose(infile);/* At this point you may want to check to see whether any corrupt-data* warnings occurred (test whether jerr.pub.num_warnings is nonzero).*//* And we're done! */return 1;
}int main(int argc, char const *argv[])
{//打开LCD   open  int lcd_fd = open("/dev/fb0",O_RDWR);//对LCD进行内存映射  mmaplcd_mp = (int *)mmap(NULL,800*480*4,PROT_READ|PROT_WRITE,MAP_SHARED,lcd_fd,0);read_JPEG_file (argv[1],100,100);return 0;
}
http://www.sczhlp.com/news/7660/

相关文章:

  • 【ganesha】函数nfs4_op_open解析
  • day1 python
  • P10255
  • 后缀数组专题
  • 题解:[HEOI2016/TJOI2016] 字符串
  • 学习一下电影摄影
  • uva679题解
  • 如何成为一名合格的站长——搜嗖工具箱
  • 24位色深bmp图片显示lcd屏幕上
  • 深入解析:多线程--关于锁的一些知识考点
  • UVa11212(IDA*)
  • SM19020模拟单选下拉框。
  • 20250807
  • 智慧记v7.1.1破解补丁(白银会员版及黄金会员版)
  • 金蝶KIS店铺标准版v5.1.0.0安装包及破解
  • Android Camera性能分析 -预览Buffer Path Trace实战分析
  • [PaperReading] UNLEASHING LARGE-SCALE VIDEO GENERATIVE PRE-TRAINING FOR VISUAL ROBOT MANIPULATION
  • 重启 - intro
  • 经典的金蝶KIS专业版V10SP1破解版
  • 智慧记v 6.25.3白金会员版黄金会员版破解
  • 练习cf1832C. Contrast Value
  • .NET周刊【7月第4期 2025-07-27】
  • 记录win11下,WPF设置 System.AppUserModel.PreventPinning 属性用于阻止用户将应用程序固定到任务栏
  • 【泛微E9】在流程表单里嵌入查询列表
  • (简记)二分答案 二分查找 倍增 RMQ ST 表
  • 宝塔部署node.js项目
  • 2025.8.7打卡
  • Nmap网络扫描
  • springboot使用websocket - br