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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4632|回復: 3
打印 上一主題 下一主題
收起左側

關于在嵌入式開發板上顯示一張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)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:499882 發表于 2020-7-28 11:33 | 只看該作者
可以再發一次嗎?文件損壞了。
回復

使用道具 舉報

板凳
ID:328014 發表于 2020-7-28 14:52 | 只看該作者
最新版的winrar可以解壓
回復

使用道具 舉報

地板
ID:503899 發表于 2022-8-28 01:46 | 只看該作者
說明不夠詳細
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩久久久 | 日本福利片 | 99久久婷婷国产综合精品电影 | 亚洲人在线观看视频 | 中文字幕久久精品 | 亚洲国产欧美日韩 | 免费三级网站 | 中文在线播放 | 日韩精品 电影一区 亚洲 | 国产不卡视频 | 国产一区二区三区 | 久在线视频播放免费视频 | 91久久久久久久久久久久久 | 久久精品国产一区二区电影 | 久热伊人 | 国产精品久久久久无码av | 国产福利久久 | 国产精品日本一区二区不卡视频 | 91电影院| 亚洲成人观看 | 成人精品一区亚洲午夜久久久 | 欧美aⅴ | 色婷婷av一区二区三区软件 | 久久五月婷 | 我爱操 | 国产精品久久久久久久久免费丝袜 | 一区二区三区四区电影视频在线观看 | 国产精品视频一二三区 | 男人的天堂中文字幕 | 国产日韩欧美一区二区在线播放 | 成年人在线观看 | www国产亚洲精品久久网站 | 日韩精品一区二区三区中文在线 | 日韩尤物视频 | heyzo在线 | 99只有精品| 超碰在线免费 | 成人在线观看免费 | 日本黄色免费大片 | www.国产精品 | 国产精品久久精品 |