久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 關于在嵌入式開發板上顯示一張jpeg圖片 [打印本頁]

作者: 靖康單片機    時間: 2019-4-22 11:03
標題: 關于在嵌入式開發板上顯示一張jpeg圖片
圖片自己上傳,還有圖片名稱,在代碼也要跟著修改


單片機源程序如下:
  1. #include "lcdjpg.h"

  2. static char g_color_buf[FB_SIZE]={0};

  3. static int  g_fb_fd;
  4. static int *g_pfb_memory;

  5. /* video_chat.c 畫中畫顯示的坐標 */
  6. volatile int g_jpg_in_jpg_x;
  7. volatile int g_jpg_in_jpg_y;



  8. /****************************************************
  9. *函數名稱:file_size_get
  10. *輸入參數:pfile_path        -文件路徑
  11. *返 回 值:-1                -失敗
  12.                    其他值        -文件大小
  13. *說        明:獲取文件大小
  14. ****************************************************/
  15. unsigned long file_size_get(const char *pfile_path)
  16. {
  17.         unsigned long filesize = -1;       
  18.         struct stat statbuff;
  19.        
  20.         if(stat(pfile_path, &statbuff) < 0)
  21.         {
  22.                 return filesize;
  23.         }
  24.         else
  25.         {
  26.                 filesize = statbuff.st_size;
  27.         }
  28.        
  29.         return filesize;
  30. }

  31. unsigned char bcc_check(unsigned char *buf, int n)
  32. {
  33.     int i;
  34.     unsigned char bcc=0;
  35.        
  36.     for(i = 0; i < n; i++)
  37.     {
  38.         bcc ^= *(buf+i);
  39.     }
  40.        
  41.     return (~bcc);
  42. }


  43. //LCD畫點
  44. void lcd_draw_point(unsigned int x,unsigned int y, unsigned int color)
  45. {
  46.         *(g_pfb_memory+y*800+x)=color;
  47. }


  48. int lcd_draw_jpg(unsigned int x,unsigned int y,const char *pjpg_path,char *pjpg_buf,unsigned int jpg_buf_size,unsigned int jpg_half)  
  49. {
  50.         //初始化LCD
  51.         g_fb_fd = open("/dev/fb0", O_RDWR);
  52.        
  53.         if(g_fb_fd<0)
  54.         {
  55.                         printf("open lcd error\n");
  56.                         return -1;
  57.         }

  58.         g_pfb_memory  = (int *)mmap(        NULL,                                         //映射區的開始地址,設置為NULL時表示由系統決定映射區的起始地址
  59.                                                                         FB_SIZE,                                 //映射區的長度
  60.                                                                         PROT_READ|PROT_WRITE,         //內容可以被讀取和寫入
  61.                                                                         MAP_SHARED,                                //共享內存
  62.                                                                         g_fb_fd,                                 //有效的文件描述詞
  63.                                                                         0                                                //被映射對象內容的起點
  64.                                                                 );
  65.        
  66.         /*定義解碼對象,錯誤處理對象*/
  67.         struct         jpeg_decompress_struct         cinfo;
  68.         struct         jpeg_error_mgr                         jerr;       
  69.        
  70.         char *pcolor_buf = g_color_buf;
  71.         char         *pjpg;
  72.        
  73.         unsigned int         i=0;
  74.         unsigned int        color =0;
  75.         unsigned int        count =0;
  76.        
  77.         unsigned int         x_s = x;
  78.         unsigned int         x_e ;       
  79.         unsigned int         y_e ;
  80.        
  81.                          int        jpg_fd;
  82.         unsigned int         jpg_size;
  83.        
  84.         unsigned int         jpg_width;
  85.         unsigned int         jpg_height;
  86.        

  87.         if(pjpg_path!=NULL)
  88.         {
  89.                 /* 申請jpg資源,權限可讀可寫 */       
  90.                 jpg_fd=open(pjpg_path,O_RDWR);
  91.                
  92.                 if(jpg_fd == -1)
  93.                 {
  94.                    printf("open %s error\n",pjpg_path);
  95.                   
  96.                    return -1;       
  97.                 }       
  98.                
  99.                 /* 獲取jpg文件的大小 */
  100.                 jpg_size=file_size_get(pjpg_path);       

  101.                 /* 為jpg文件申請內存空間 */       
  102.                 pjpg = malloc(jpg_size);

  103.                 /* 讀取jpg文件所有內容到內存 */               
  104.                 read(jpg_fd,pjpg,jpg_size);
  105.         }
  106.         else
  107.         {
  108.                 jpg_size = jpg_buf_size;
  109.                
  110.                 pjpg = pjpg_buf;
  111.         }

  112.         /*注冊出錯處理*/
  113.         cinfo.err = jpeg_std_error(&jerr);

  114.         /*創建解碼*/
  115.         jpeg_create_decompress(&cinfo);

  116.         /*直接解碼內存數據*/               
  117.         jpeg_mem_src(&cinfo,pjpg,jpg_size);
  118.        
  119.         /*讀文件頭*/
  120.         jpeg_read_header(&cinfo, TRUE);

  121.         /*開始解碼*/
  122.         jpeg_start_decompress(&cinfo);       
  123.        
  124.        
  125.         if(jpg_half)
  126.         {
  127.                 x_e        = x_s+(cinfo.output_width/2);
  128.                 y_e        = y  +(cinfo.output_height/2);               
  129.                
  130.                 /*讀解碼數據*/
  131.                 while(cinfo.output_scanline < cinfo.output_height)
  132.                 {               
  133.                         pcolor_buf = g_color_buf;
  134.                        
  135.                         /* 讀取jpg一行的rgb值 */
  136.                         jpeg_read_scanlines(&cinfo,(JSAMPARRAY)&pcolor_buf,1);                       
  137.                        
  138.                         /* 再讀取jpg一行的rgb值 */
  139.                         jpeg_read_scanlines(&cinfo,(JSAMPARRAY)&pcolor_buf,1);

  140.                         for(i=0; i<(cinfo.output_width/2); i++)
  141.                         {
  142.                                 /* 獲取rgb值 */
  143.                                 color =                 *(pcolor_buf+2);
  144.                                 color = color | *(pcolor_buf+1)<<8;
  145.                                 color = color | *(pcolor_buf)<<16;
  146.                                
  147.                                 /* 顯示像素點 */
  148.                                 lcd_draw_point(x,y,color);
  149.                                
  150.                                 pcolor_buf +=6;
  151.                                
  152.                                 x++;
  153.                         }
  154.                        
  155.                         /* 換行 */
  156.                         y++;                                       
  157.                        
  158.                        
  159.                         x = x_s;       

  160.                        
  161.                 }
  162.         }
  163.         else
  164.         {
  165.                 x_e        = x_s+cinfo.output_width;
  166.                 y_e        = y  +cinfo.output_height;       

  167.                 /*讀解碼數據*/
  168.                 while(cinfo.output_scanline < cinfo.output_height )
  169.                 {               
  170.                         pcolor_buf = g_color_buf;
  171.                        
  172.                         /* 讀取jpg一行的rgb值 */
  173.                         jpeg_read_scanlines(&cinfo,(JSAMPARRAY)&pcolor_buf,1);
  174.                        
  175.                         for(i=0; i<cinfo.output_width; i++)
  176.                         {
  177.                                 /* 獲取rgb值 */
  178.                                 color =                 *(pcolor_buf+2);
  179.                                 color = color | *(pcolor_buf+1)<<8;
  180.                                 color = color | *(pcolor_buf)<<16;
  181.                                
  182.                                 /* 顯示像素點 */
  183.                                 lcd_draw_point(x,y,color);
  184.                                
  185.                                 pcolor_buf +=3;
  186.                                
  187.                                 x++;
  188.                         }
  189.                        
  190.                         /* 換行 */
  191. ……………………

  192. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
LED顯示圖片.zip (2.05 MB, 下載次數: 26)



作者: 懿乾昶    時間: 2020-7-28 11:33
可以再發一次嗎?文件損壞了。
作者: 51hei團團    時間: 2020-7-28 14:52
最新版的winrar可以解壓
作者: weixp    時間: 2022-8-28 01:46
說明不夠詳細




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲一级黄色 | 看黄色大片 | 欧美日韩在线观看视频 | 亚洲日本中文字幕 | 在线免费毛片 | 99国产在线观看 | 亚洲影院一区 | 欧美日韩少妇 | 国产日韩欧美日韩大片 | av高清在线 | 日韩毛片视频 | 黄色片中文字幕 | 涩涩久久 | 国产成人三级一区二区在线观看一 | 国产精品免费一区 | 亚洲三级黄色片 | 天堂av片 | 久草视频观看 | 亚洲黄色小视频 | 婷婷综合| 一级黄色免费 | 国产男女视频 | 成人国产综合 | 国产农村妇女aaaaa视频 | 国产不卡在线观看 | 欧美精品一区在线观看 | 亚洲精品网站在线观看 | 成年人视频免费看 | 日韩一区二区三免费高清在线观看 | 久久艳片www.17c.com | 天天天天天操 | 日韩中文字幕在线观看 | 欧美日韩中文字幕在线 | 亚洲少妇一区 | 色综合天天综合网国产成人网 | 97在线免费观看视频 | 亚洲黄色在线 | 窝窝午夜精品一区二区 | 自拍偷拍一区二区三区 | av网页在线观看 | 欧美三级 欧美一级 |