亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關注微信公眾號

嵌入式Linux的圖像采集與顯示(下)
2007-01-26   中國IT實驗室

然后調用ioct1(grab_fd,VIDIOCSYNC,&frame)函數,該函數成功返回則表示采集完畢,采集到的圖像數據放到以data為起始地址,長度為240×320×3的內存區域中,讀取該內存中的數據便可得到圖像數據。

&

nbsp;
在此基礎上同樣可實現連續幀的采集,即一次采集連續多幀圖像的數據,Video4Linux最多支持一次采集32幀,此時首先要設置 grab_buf.frame為要采集的幀數,而每一幀的數據在內存中的位置為data+grab_vm.offsets[frame],其中 grab_vm為video_mbuf結構體變量的一個聲明,利用ioct1(fd,VIDIOCGMBUF,&grab_vm)便可獲得grab_vm 的信息。

4 基于FrameBuffer的圖象顯示

當Video4Linux使用mmap方式采集圖像時,他總是盡最大努力將圖像直接顯示在屏幕上,但并不一定能夠完成,因此一個完整的設備應該具有圖像顯示的功能,一般來講,嵌入式Linux下顯示一幅圖像總共有以下幾種方法:

(1)在利用Video4Linux采集圖像時,將采集到的圖象數據直接放到FrameBuffer的內存映射區中,而Video4Linux也支持這種 功能,利用VIDIOCSFBUF和VIDIOCGFBUF這兩個ioct1函數,可設置和獲得struct video_buffer。但該方法并不是每個圖像采集設備都支持。

(2)進圖像數據存成各種格式(例如bmp),在各種GUI軟件中,均會直接顯示不同格式的圖像的函數,如MiniGui中的FillBoxWithBitmap函數。

(3)直接將圖像數據寫入FrameBuffer中。

在這里主要介紹第3種。FrameBuffer設備是運行在Linux控制臺上的一個優秀的圖形接口,他幾乎支持所有的硬件,提供了統一的API接口,很 好地實現了硬件無關性,他可以直接操作顯存,而且還留有提供圖形加速功能的接口,運行時不需要root權限;FrameBuffer的設備節點是 /dev/fb*,用戶若要使用他,需要在編譯內核時選中FrameBuffer,其簡單的使用程序如下:

簡單的使用程序

從vinfo和finfo中取得顯存起始地址、分辨率、色深等信息,然后根據這些計算出需映射顯存的大小。

從vinfo和finfo中取得顯存起始地址、分辨率、色深等信息,然后根據這些計算出需映射顯存的大小

由此便可直接操作大小為screensize,起始地址為fbp的內存區域,在LCD上直接顯示圖像、圖形、文字等,例如執行memset(fbp,0,screensize)將進行清屏操作。

需要注意的是,對于色深為8位或8位以下的設備,在進行繪圖操作前還需要設置合適的調色板,操作調色板要用到fb_camp結構,執行ioctl(fd,FBIOGETCMAP,&old_cmap)將保存調色板信息,執行ioctl(fd,FBIO-PUTCMAP,&new_cmap)將設置新的調色板。以下介紹如何顯示一個象素,這里假設LCD為24位色的。



如何顯示一個象素,這里假設LCD為24位色的

由此便可逐一顯示每個象素,進而顯示整幅圖像。

5 結語

由于Linux的驅動模型支持模塊堆疊技術,內核開發者已提供了一些通用模塊,因此,雖然文中是以USB攝像頭為例,但只要針對自己的圖像采集設備編寫基于Video4 Linux的驅動程序, 針對自己的LCD編寫基于FrameBuffer的驅動程序,以上的程序便可成為通用的圖像采集與顯示程序。應用本文所述方法完成圖像采集與顯示工作,再 加上相關的處理并接入網絡,就構成了一個智能終端設備,可用于工廠、銀行等場合全天候的智能監控,圖像的網絡通信等,具有廣闊的是市場和應用前景。

from:

http://article.ednchina.com/Embeded/2006-10/200610101046022.htm

熱詞搜索:

上一篇:嵌入式Linux的圖像采集與顯示(上)
下一篇:硬盤扇區的讀寫函數及其調用路徑

分享到: 收藏