最近在研究基于imx6ull開發板,想讓開發板支持顯示圖片、字符串、背景色的功能。操作的主要步驟如下:
- 移植設備樹和驅動
- 移植libjpeg庫
- 編寫測試程序
一、移植設備樹和驅動
開發板原廠SDK已經移植了lcd對應的設備樹和驅動。具體可以參考韋東山老師的文章
https://blog.csdn.net/thisway_diy/article/details/104697924
二、移植libjpeg庫
1.下載libjpeg庫
下載地址:http://www.ijg.org/files/
選擇版本:jpegsrc.v6b.tar.gz
2.解壓
yikou@ubuntu:/work/lib$ tar -zxvf jpegsrc.v6b.tar.gz
3.配置
yikou@ubuntu:/work/lib$ cd jpeg-6b/./configure --host=arm-linux-gnueabihf --prefix=$PWD/temp_install如果遇到錯誤提示沒有某個目錄,只需要手動創建即可
4. 安裝
yikou@ubuntu:/work/lib/jpeg-6b$ makeyikou@ubuntu:/work/lib/jpeg-6b$ make install
5.查看
yikou@ubuntu:/work/lib/jpeg-6b$ cd temp_install/yikou@ubuntu:/work/lib/jpeg-6b/temp_install$ lsbin include lib share
我沒有使用動態庫,而是直接使用靜態庫/work/lib/jpeg-6b/libjpeg.a 編譯代碼,方便操作。
三、 編譯測試程序
一口君是把靜態庫直接拷貝到測試代碼目錄lib下,頭文件拷貝到include下。
文件目錄
- lcd.c、lcd_show_jpeg.c為基于libjpeg庫實現的顯示漢字、顯示圖片、劃線等功能函數。
- HZK16為漢字庫
- ./lib/libjpeg.a 是libjpeg靜態庫
- include下的頭文件是圖片格式處理、顯示字符串、劃線要用到的其他的頭文件
這些功能具體原理,可以自己查看代碼,暫不討論。
完整代碼請關注 一口Linux,后臺回復IMX6ULLlcd
以下是測試程序文件:main.c
#include <stdio.h>#include <unistd.h>#include "lcd.h"#include "lcd_show_jpeg.h" int main(int argc, const char *argv[]){ LCD_Init(); //初始化 LCD_Clear(RED);//背景呈紅色 for(;;) {//1024 * 600 printf("------一口Linux----------\n"); LCD_PutString(240,136,"一口Linux",BLUE,RED);//在240.136位置顯示一口Linux,藍字紅底 sleep(1); LCD_Clear(BLUE); show_jpeg("test.jpeg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg==,t_20");//顯示圖片test.jpeg?x-oss-process=image/watermark,g_center,image_YXJ0aWNsZS9wdWJsaWMvd2F0ZXJtYXJrLnBuZz94LW9zcy1wcm9jZXNzPWltYWdlL3Jlc2l6ZSxQXzQwCg==,t_20 sleep(10); } return 0;}
arm-linux-gnueabihf-gcc *.c -o run -I ./include/ ./lib/libjpeg.a
執行結果:
執行結果
想呈現其他顯示效果,只需根據實例調用對應函數即可。
備注:常見錯誤解決
如果版本選擇的不對,會遇到以下錯誤:
Wrong JPEG library version: library is 90, caller expects 62
因為使用的庫版本太高是90的,所以需要下載62版本,對應的是這個壓縮包jpegsrc.v6b.tar.gz。其中:62 對應 6b
在移植mjpeg-streamer也會遇到類似錯誤,按照步驟修改即可。
然后按照1-5步驟重新操作即可