qt超易實現錄屏程式的方法
阿新 • • 發佈:2019-02-05
QT錄屏程式的實現
1 獲取桌面的影象
The QApplication::desktop() function is used to get an instance of QDesktopWidget.
// QApplication::desktop()用於獲取當前系統的桌面物件.
QScreen *screen = QApplication::primaryScreen(); //獲取當前程式的主視窗物件
QPixmap map = screen->grabWindow(QApplication::desktop()->winId()); //呼叫主視窗物件的捕捉視窗影象,並傳遞桌面視窗的id號
map.save("/kkk.jpg"); //儲存影象
2 把資料編碼成jpg, 並存在記憶體數組裡
QByteArray ba;
QBuffer bf(&ba);
map.save(&bf, "jpg", 30) // 30表示壓宿率,值從0 – 100, 值越小表示編碼出來的影象檔案就越小,當然也就越不清晰
3 再把jpg檔案封裝成avi檔案。 avi檔案的封裝由avilib.h, avilib.cpp來實現(從luvcview原始碼裡獲得)
我們主要使用裡面的4個函式:
avi_t* AVI_open_output_file(char * filename); //建立一個操作輸出檔案的物件
void AVI_set_video(avi_t *AVI, int width, int height, double fps, char *compressor); //設定視訊檔案的解析度, 多少幀一秒, 編碼方式
int AVI_write_frame(avi_t *AVI, char *data, long bytes, int keyframe); //儲存一幀影象, keyframe表示是否為關鍵幀(即是否完整的一幀影象資料, jpg每張都是完整的)
int AVI_close(avi_t *AVI); //結束儲存視訊,並會寫入檔案索引的。