0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SDL編譯安裝圖片顯示

嵌入式技術(shù) ? 來源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2022-09-29 15:54 ? 次閱讀

SDL編譯安裝圖片顯示

1.SDL簡(jiǎn)介

?SDL(Simple DirectMediaLayer)是一套開放源代碼的跨平臺(tái)多媒體開發(fā)庫,使用C語言寫成。SDL提供了數(shù)種控制圖像、聲音、輸出入的函數(shù),讓開發(fā)者只要用相同或是相似的代碼就可以開發(fā)出跨多個(gè)平臺(tái)(Linux、Windows、MacOS X等)的應(yīng)用軟件?,F(xiàn)SDL多用于開發(fā)游戲、模擬器、媒體播放器等多媒體應(yīng)用領(lǐng)域。

??在編譯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壓縮包拷貝至虛擬機(jī)解壓。

[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格式圖片需要相對(duì)應(yīng)庫支持

[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壓縮包拷貝至虛擬機(jī)解壓。

[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顯示圖片和獲取輸入出設(shè)備數(shù)據(jù)

?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;
	}
	/*創(chuàng)建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))/*監(jiān)測(cè)事件*/
		{
			if(event.type==SDL_QUIT)//關(guān)閉窗口
			{
				printf("hello,worldn");
				quit=false;
				printf("quit=%dn",quit);
			}
			else if(event.type==SDL_MOUSEBUTTONDOWN)/*鼠標(biāo)點(diǎn)擊事件*/
			{
				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();/*關(guān)閉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 運(yùn)行效果

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASVRf6Zi_5rC0,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11177

    瀏覽量

    208498
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    647

    瀏覽量

    32743
  • SDL
    SDL
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    7366
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    SDL顯示文本

    ?? SDL2.0庫本身沒有文本數(shù)據(jù)顯示相關(guān)函數(shù)接口,文本顯示需要編譯安裝SDL_ttf庫。
    的頭像 發(fā)表于 09-29 16:32 ?1904次閱讀
    <b class='flag-5'>SDL</b><b class='flag-5'>顯示</b>文本

    SDL時(shí)間和天氣顯示

    ?SDL(Simple DirectMediaLayer)是一套開放源代碼的跨平臺(tái)多媒體開發(fā)庫,使用C語言寫成。SDL提供了數(shù)種控制圖像、聲音、輸出入的函數(shù),讓開發(fā)者只要用相同或是相似的代碼就可以
    的頭像 發(fā)表于 12-08 14:15 ?1110次閱讀

    SDL的示例EMMC無法編譯是怎么回事?

    我想要編譯 SDL 的 tviibh8msrcexamplessd_hostemmc 來進(jìn)行參考 不過我復(fù)制 main_cm7_0.c 進(jìn)行編譯后,發(fā)現(xiàn)有些未定義的錯(cuò)誤 error
    發(fā)表于 02-01 07:55

    安裝好ccs,編譯時(shí)出現(xiàn)以下圖片錯(cuò)誤,怎么解決

    安裝好ccs,編譯時(shí)出現(xiàn)以下圖片錯(cuò)誤,怎么解決
    發(fā)表于 05-10 16:28

    SDL的交叉編譯問題

    求助??!移植SDL到mini2440開發(fā)板上時(shí),在交叉編譯SDL_image進(jìn)行configure之后,再make時(shí)出現(xiàn)如下錯(cuò)誤:/opt/mini2440/output/lib/libSDL.so
    發(fā)表于 12-06 20:50

    怎樣將插在mini2440中SD卡的圖片顯示出來

    各位大神,我想請(qǐng)教下,我的mini2440的板子,上面燒寫了內(nèi)核,以及自己制作的最小根文件系統(tǒng)(沒有安裝QT),然后移植了交叉編譯好了的ffmpeg,以及mplayer,還有sdl庫,我想請(qǐng)教下,怎樣將SD卡中的
    發(fā)表于 12-24 23:33

    移植SDL到JZ2440顯示BMP圖片

    LOGO的制作, 韋老師第3期講了如何顯示jpeg圖片, 那么怎么顯示bmp圖片?這次我們借助libSDL來實(shí)現(xiàn),我們先移植SDL到Ubun
    發(fā)表于 06-29 11:19

    請(qǐng)問怎么快速顯示圖片到LCD?

    先設(shè)置環(huán)境變量export SDL_NOMOUSE=1復(fù)制代碼備注:由于SDL原生只支持bmp圖片,所以以上幾個(gè)圖片都是bmp格式。如果需要顯示
    發(fā)表于 06-06 04:33

    這個(gè)圖片圖片顯示實(shí)驗(yàn)編譯后的結(jié)果老是報(bào)這個(gè)錯(cuò)誤是我編譯器設(shè)置的問題嗎?

    這個(gè)圖片圖片顯示實(shí)驗(yàn)編譯后的結(jié)果老是報(bào)這個(gè)錯(cuò)誤是我編譯器設(shè)置的問題嗎??謝謝各位?。。?/div>
    發(fā)表于 08-06 23:33

    【飛凌RK3588開發(fā)板試用】基于SDL進(jìn)行GUI程序開發(fā)

    cd SDL2-2.26.4/ 創(chuàng)建目錄mkdir build 配置./configure --prefix=$PWD/build 構(gòu)建安裝make && make install 編譯
    發(fā)表于 04-06 15:30

    GUI向?qū)?b class='flag-5'>編譯錯(cuò)誤,找不到“SDL2/SDL.h”文件是怎么回事?

    如何找出編譯錯(cuò)誤:找不到“SDL2/SDL.h”文件 使用 MAC OS 12.6 和最新的guy guider 版本。
    發(fā)表于 05-04 08:44

    【昉·星光 2 高性能RISC-V單板計(jì)算機(jī)體驗(yàn)】使用 SDL2 繪制窗口程序

    libsdl2-dev 軟件包安裝好 然后編寫代碼,創(chuàng)建一個(gè)窗口并在窗口上顯示一個(gè)BMP位圖,位圖和代碼如下 位圖(論壇不能上傳bmp,這里給的是jpg,需要手動(dòng)轉(zhuǎn)為bmp) 代碼 #include
    發(fā)表于 08-05 18:54

    基于SDL的自動(dòng)售票系統(tǒng)的研發(fā)

    基于SDL 的自動(dòng)售票系統(tǒng)的研發(fā)顧麗麗 梅杓春(南京郵電大學(xué)自動(dòng)化學(xué)院,江蘇南京 210003)摘要:本文簡(jiǎn)要介紹了SDL語言及其支持工具。通過設(shè)計(jì)自動(dòng)售票系統(tǒng)實(shí)例對(duì)如何利用SDL
    發(fā)表于 12-18 11:34 ?21次下載

    iftop源代碼編譯安裝

    iftop源代碼編譯安裝
    發(fā)表于 04-03 23:39 ?15次下載
    iftop源代碼<b class='flag-5'>編譯</b><b class='flag-5'>安裝</b>

    SDL下載與配置

    點(diǎn)擊[SDL2 核心庫下載](https://libsdl.org/download-2.0.php)下載SDL2庫,如下圖根據(jù)編譯器選擇不同版本(Visual Studo系列選擇第一個(gè))。
    的頭像 發(fā)表于 02-27 14:51 ?2858次閱讀
    <b class='flag-5'>SDL</b>下載與配置