ToB企服应用市场:ToB评测及商务社交产业平台

标题: JPEG库的移植(arm平台) [打印本页]

作者: 锦通    时间: 2024-5-20 01:39
标题: JPEG库的移植(arm平台)
JPEG库的移植(arm平台)


目次

介绍

图解
头文件及全局变量
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/types.h>
  4. #include <sys/stat.h>
  5. #include <fcntl.h>
  6. #include <unistd.h>
  7. #include <sys/mman.h>
  8. /*
  9. * Include file for users of JPEG library.
  10. * You will need to have included system headers that define at least
  11. * the typedefs FILE and size_t before you can include jpeglib.h.
  12. * (stdio.h is sufficient on ANSI-conforming systems.)
  13. * You may also wish to include "jerror.h".
  14. */
  15. #include "jpeglib.h"
  16. #pragma pack(1)
  17. typedef struct tagBmpFileHeader // 文件头
  18. {
  19.   unsigned short bfType;      // 标识该文件为bmp文件,判断文件是否为bmp文件,即用该值与"0x4d42"比较是否相等即可,0x4d42 = 19778
  20.   unsigned long bfSize;       // 位图文件大小,包括这14个字节。
  21.   unsigned short bfReserved1; // 预保留位,暂不用。
  22.   unsigned short bfReserved2; // 预保留位,暂不用。
  23.   unsigned long bfOffBits;    // 图像数据区的起始位置
  24. } BmpFileHeader;              // 14字节:short2个,long4个
  25. typedef struct tagBmpInfoHeader // 信息头
  26. {
  27.   unsigned long biSize;          // 本结构的长度,为40个字节。
  28.   long biWidth;                  // 宽度
  29.   long biHeight;                 // 高度
  30.   unsigned short biPlanes;       // 目标设备的级别,必须是1。
  31.   unsigned short biBitCount;     // 每个像素所占的位数(bit),其值必须为1(黑白图像)、4(16色图)、8(256色)、24(真彩色图),新的BMP格式支持32位色。
  32.   unsigned longbiCompression;    // 压缩方式,有效的值为BI_RGB(未经压缩)、BI_RLE8、BI_RLE4、BI_BITFILEDS(均为Windows定义常量)。
  33.   unsigned longbiSizeImage;      // 图像区数据大小,即实际的位图数据占用的字节数
  34.   long biXPelsPerMeter;          // 水平分辨率,像素每米
  35.   long biYPelsPerMeter;          // 垂直分辨率,单位是像素/米
  36.   unsigned long biClrUsed;       // 位图实际用到的颜色数,如果该值为零,则用到的颜色数为2的biBitCount次幂。
  37.   unsigned short biClrImportant; // 位图显示过程,重要的颜色数;0--所有都重要
  38. } BmpInfoHeader;                 // 40字节
  39. #pragma pack()
  40. int *lcd_mp;
复制代码
1、图片显示

[code]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); // 从上到下,从左到右  RGB RGB RGB RGB    for (int i = 0; i < cinfo.output_width; ++i) // 012 345    {      data |= buffer[3 * i]




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4