真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++編程使用QT5SDK錄制屏幕并顯示

在項(xiàng)目中,我們有要錄制屏幕的需求,錄制屏幕有多種方法,可以基于windows api的BitBlt 、ffmpeg的AVDevice、directx 和QT,本文講解基于QT5的抓屏。QT相對(duì)于其他幾種抓屏方式優(yōu)勢(shì)是跨平臺(tái)做的比較好,接口簡(jiǎn)單,劣勢(shì)相對(duì)于directx抓屏消耗大一些,但directx只能是windows。經(jīng)過測(cè)試directx抓屏速度最快,其他接口速度基本一致。

創(chuàng)新互聯(lián)長期為上千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為襄汾企業(yè)提供專業(yè)的網(wǎng)站制作、成都網(wǎng)站制作,襄汾網(wǎng)站改版等技術(shù)服務(wù)。擁有10年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

在我的電腦上qt 1080P屏幕抓屏消耗60~80毫秒,720p消耗30~50,也就是說如果抓屏1080我一秒最多錄制10幀。這個(gè)性能要算好,不然會(huì)造成阻塞。

  • 先獲取主屏幕然后抓屏存到QPixmap

//獲取主屏幕

QScreen *scr = QGuiApplication::primaryScreen();

//抓屏

QPixmap pix= scr->grabWindow(QApplication::desktop()->winId());

  • 將QPixmap轉(zhuǎn)為可以直接訪問rgb數(shù)據(jù)的QImage

就兩行代碼非常簡(jiǎn)單,抓屏后數(shù)據(jù)存放在pix中,將QPixmap轉(zhuǎn)換為QImage就可以取到rgb數(shù)據(jù)了。

QImage img= pix.toImage();

uchar *date = img.bits();

  • QImage格式分析

取到截屏數(shù)據(jù)后,我們就要進(jìn)行編碼壓縮,編碼可以使用ffmpeg,需要確定取到的數(shù)據(jù)格式,可以通過img.format成員獲取,我這邊獲取的是Format_RGB32。另外要注意QT中的圖像數(shù)據(jù)不一定每個(gè)像素連續(xù)存儲(chǔ),每一行會(huì)以4對(duì)齊,最簡(jiǎn)單解決方案,就是要保證你圖像的寬度是4的倍數(shù)。如果無法保證,可以通過 img.bytesPerLine() 獲取每一行的字節(jié)數(shù)。

  • 如果想要將桌面繪制到QWidget中測(cè)試,重載paintEvent函數(shù)

void QTScreen::paintEvent(QPaintEvent *event)

{

QScreen *scr = QGuiApplication::primaryScreen();

//抓屏

QPixmap pix= scr->grabWindow(QApplication::desktop()->winId());

QImage img= pix.toImage();

QPainter p;

p.begin(this);

p.drawImage(QPoint(0, 0), qi);

p.end();

}

更多的資料也可以關(guān)注我51CTO上的視頻課程

夏老師的課堂 http://edu.51cto.com/lecturer/12016059.html

C++跨平臺(tái)開發(fā)和音視頻技術(shù)實(shí)戰(zhàn)主題套餐

C++實(shí)戰(zhàn)FFmpeg音視頻編碼實(shí)戰(zhàn)屏幕錄像機(jī)視頻課程-基于QT5和ffmpeg sdk

http://edu.51cto.com/course/10359.html

C++編程 使用QT5 SDK錄制屏幕并顯示


網(wǎng)站標(biāo)題:C++編程使用QT5SDK錄制屏幕并顯示
分享路徑:http://weahome.cn/article/ihhhgg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部