SDL編譯安裝圖片顯示
1.SDL簡介
?SDL(Simple DirectMediaLayer)是一套開放源代碼的跨平臺多媒體開發庫,使用C語言寫成。SDL提供了數種控制圖像、聲音、輸出入的函數,讓開發者只要用相同或是相似的代碼就可以開發出跨多個平臺(Linux、Windows、MacOS X等)的應用軟件。現SDL多用于開發游戲、模擬器、媒體播放器等多媒體應用領域。
??在編譯SDL庫前,先安裝以下工具:
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool
sudo apt-get install make
sudo apt-get install xorg-dev
2. SDL庫編譯與安裝
?下載地址:SDL2.0
?(1)將下載的SDL2-2.0.14.tar.gz壓縮包拷貝至虛擬機解壓。
[wbyq@wbyq src_pack]$ tar xvf /mnt/hgfs/ubuntu/software_pack/SDL2-2.0.14.tar.gz
?(2)配置編譯安裝路徑
[wbyq@wbyq SDL2-2.0.14]$ ./autogen.sh
[wbyq@wbyq SDL2-2.0.14]$ ./configure --prefix=$PWD/_install
[wbyq@wbyq SDL2-2.0.14]$ make && make install
?(3)編譯成功生成文文件
[wbyq@wbyq _install]$ ls
bin include lib share
1.3 SDL2_image庫編譯與安裝
??bmp_surface加載jpg格式圖片和png格式圖片需要相對應庫支持
[wbyq@wbyq src_pack]$ sudo apt-get install libjpeg-dev #安裝jpg庫
[wbyq@wbyq src_pack]$ sudo apt-get install libpng-dev #安裝png庫
?下載地址:SDL_IMAGE
?(1)將 SDL2_image-2.0.5.tar.gz壓縮包拷貝至虛擬機解壓。
[wbyq@wbyq src_pack]$ tar xvf /mnt/hgfs/ubuntu/software_pack/SDL2_image-2.0.5.tar.gz
?(2)配置編譯安裝路徑
[wbyq@wbyq SDL2_image-2.0.5]$ ./autogen.sh
[wbyq@wbyq SDL2_image-2.0.5]$ ./configure --prefix=$PWD/_install
[wbyq@wbyq SDL2_image-2.0.5]$ make && make install
?(3)編譯成功生成文文件
[wbyq@wbyq _install]$ tree
.
├── include
│ └── SDL2
│ └── SDL_image.h
└── lib
├── libSDL2_image-2.0.so.0 -> libSDL2_image-2.0.so.0.2.3
├── libSDL2_image-2.0.so.0.2.3
├── libSDL2_image.a
├── libSDL2_image.la
├── libSDL2_image.so -> libSDL2_image-2.0.so.0.2.3
└── pkgconfig
└── SDL2_image.pc
4 directories, 7 files
1.4 示例1:SDL顯示圖片和獲取輸入出設備數據
?1.4.1 示例代碼
#include
#include
#include
#include
typedef enum
{
false,
true
} bool;
int main(int argc,char *argv[])
{
if(SDL_Init(SDL_INIT_VIDEO))/*初始化SDL*/
{
printf("初始化失敗ERR=%srn",SDL_GetError());
return 0;
}
/*創建SDL窗口*/
SDL_Window *window=SDL_CreateWindow("SDL Test", SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,800,480,SDL_WINDOW_SHOWN);
SDL_Rect rect;
rect.x=0;
rect.y=0;
SDL_Surface *surface=SDL_GetWindowSurface(window);/*獲取窗口*/
SDL_Surface *pngsurface=IMG_Load("bg6.png");
SDL_Surface *bmp_surface=IMG_Load("1.bmp");
SDL_BlitSurface(bmp_surface,NULL,surface,NULL);
SDL_UpdateWindowSurface(window);/*刷新窗口*/
bool quit= true;
SDL_Event event;
while(quit)
{
while(SDL_PollEvent(&event))/*監測事件*/
{
if(event.type==SDL_QUIT)//關閉窗口
{
printf("hello,worldn");
quit=false;
printf("quit=%dn",quit);
}
else if(event.type==SDL_MOUSEBUTTONDOWN)/*鼠標點擊事件*/
{
if(event.button.button==SDL_BUTTON_LEFT)/*左鍵*/
{
printf("left clickedn");
SDL_BlitSurface(bmp_surface,NULL,surface,NULL);
}
if(event.button.button==SDL_BUTTON_RIGHT)/*右鍵*/
{
printf("right clickedn");
SDL_BlitSurface(pngsurface,NULL,surface,NULL);
}
}
else if(event.type==SDL_KEYDOWN)//鍵盤事件
{
printf("key=%dn",event.key.keysym.sym);
if(event.key.keysym.sym==SDLK_UP)
{
rect.y-=10;
printf("upn");
}
else if(event.key.keysym.sym==SDLK_DOWN)
{
rect.y+=10;
printf("downn");
}
else if(event.key.keysym.sym==SDLK_LEFT)
{
rect.x-=10;
printf("leftn");
}
else if(event.key.keysym.sym==SDLK_RIGHT)
{
rect.x+=10;
printf("rightn");
}
SDL_BlitSurface(bmp_surface,NULL,surface,NULL);
SDL_BlitSurface(pngsurface,NULL,surface,&rect);
}
SDL_UpdateWindowSurface(window);/*刷新窗口*/
}
}
SDL_FreeSurface(surface);
SDL_DestroyWindow(window);/*銷毀窗口*/
SDL_Quit();/*關閉SDL*/
return 0;
}
1.4.2 Makefile文件
CFLAGS =-I/home/wbyq/src_pack/SDL2-2.0.14/_install/include -I/home/wbyq/src_pack/SDL2-2.0.14/_install/include/SDL2 -L/home/wbyq/src_pack/SDL2-2.0.14/_install/lib
CFLAGS +=-L/home/wbyq/src_pack/SDL2_image-2.0.5/_install/lib -I/home/wbyq/src_pack/SDL2_image-2.0.5/_install/include -I/home/wbyq/src_pack/SDL2_image-2.0.5/_install/include/SDL2
CFLAGS+=-lSDL2 -lpthread -lm -ldl -lSDL2_image
app:
gcc 01sdl_test.c $(CFLAGS)
1.4.3 運行效果
審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
Linux
+關注
關注
87文章
11304瀏覽量
209483 -
編譯
+關注
關注
0文章
657瀏覽量
32870 -
SDL
+關注
關注
0文章
18瀏覽量
7401
發布評論請先 登錄
相關推薦
SDL時間和天氣顯示
?SDL(Simple DirectMediaLayer)是一套開放源代碼的跨平臺多媒體開發庫,使用C語言寫成。SDL提供了數種控制圖像、聲音、輸出入的函數,讓開發者只要用相同或是相似的代碼就可以
SDL的示例EMMC無法編譯是怎么回事?
我想要編譯 SDL 的 tviibh8msrcexamplessd_hostemmc 來進行參考
不過我復制 main_cm7_0.c 進行編譯后,發現有些未定義的錯誤
error
發表于 02-01 07:55
SDL的交叉編譯問題
求助?。∫浦?b class='flag-5'>SDL到mini2440開發板上時,在交叉編譯SDL_image進行configure之后,再make時出現如下錯誤:/opt/mini2440/output/lib/libSDL.so
發表于 12-06 20:50
怎樣將插在mini2440中SD卡的圖片顯示出來
各位大神,我想請教下,我的mini2440的板子,上面燒寫了內核,以及自己制作的最小根文件系統(沒有安裝QT),然后移植了交叉編譯好了的ffmpeg,以及mplayer,還有sdl庫,我想請教下,怎樣將SD卡中的
發表于 12-24 23:33
移植SDL到JZ2440顯示BMP圖片
LOGO的制作, 韋老師第3期講了如何顯示jpeg圖片, 那么怎么顯示bmp圖片?這次我們借助libSDL來實現,我們先移植SDL到Ubun
發表于 06-29 11:19
請問怎么快速顯示圖片到LCD?
先設置環境變量export SDL_NOMOUSE=1復制代碼備注:由于SDL原生只支持bmp圖片,所以以上幾個圖片都是bmp格式。如果需要顯示
發表于 06-06 04:33
這個圖片是圖片顯示實驗編譯后的結果老是報這個錯誤是我編譯器設置的問題嗎?
這個圖片是圖片顯示實驗編譯后的結果老是報這個錯誤是我編譯器設置的問題嗎??謝謝各位?。。?/div>
發表于 08-06 23:33
【飛凌RK3588開發板試用】基于SDL進行GUI程序開發
cd SDL2-2.26.4/ 創建目錄mkdir build 配置./configure --prefix=$PWD/build 構建安裝make && make install 編譯
發表于 04-06 15:30
GUI向導編譯錯誤,找不到“SDL2/SDL.h”文件是怎么回事?
如何找出編譯錯誤:找不到“SDL2/SDL.h”文件
使用 MAC OS 12.6 和最新的guy guider 版本。
發表于 05-04 08:44
【昉·星光 2 高性能RISC-V單板計算機體驗】使用 SDL2 繪制窗口程序
libsdl2-dev 軟件包安裝好
然后編寫代碼,創建一個窗口并在窗口上顯示一個BMP位圖,位圖和代碼如下
位圖(論壇不能上傳bmp,這里給的是jpg,需要手動轉為bmp)
代碼
#include
發表于 08-05 18:54
基于SDL的自動售票系統的研發
基于SDL 的自動售票系統的研發顧麗麗 梅杓春(南京郵電大學自動化學院,江蘇南京 210003)摘要:本文簡要介紹了SDL語言及其支持工具。通過設計自動售票系統實例對如何利用SDL
發表于 12-18 11:34
?21次下載
SDL下載與配置
點擊[SDL2 核心庫下載](https://libsdl.org/download-2.0.php)下載SDL2庫,如下圖根據編譯器選擇不同版本(Visual Studo系列選擇第一個)。
評論