最近搞了搞Qt的截屏程式,參考了網上幾個例子,但是那些例子都加了很多作者自己要完成的內容,別人看起來比較費勁,我整理了一下,其實真正起作用的就那麼幾行代碼,所以我覺得有必要分享一下
QPixmap fullScreen; int screenWidget = 640; //螢幕尺寸設定,自己要寫別的函數修改尺寸的改這裡 int screenHight = 480; //就是這一步截取了全屏 fullScreen = QPixmap::grabWindow(QApplication::desktop()->winId(),0,0,screenWidget,screenHight); //這一步是設定彈出框詢問儲存位置和命名的,要自己修改位置和命名的改這裡// QFileDialog::Options options;// QString selectedFilter;// QString fileName = QFileDialog::getSaveFileName(this,// tr("Save picture"),// "savescreen.jpg",// &selectedFilter,// options); //設定地區,地區是從整螢幕中複製相應的地區,要自己寫函數的改這裡// int x = 0;// int y = 0;// int w = 300;// int h = 300;/****************************以下幾步是正常的儲存QPixmap,可以不轉QIameg****************************/// fullScreen = fullScreen.copy(x,y,w,h); //截取地區改這裡// fullScreen.save(fileName,"JPG") 需要有儲存對話方塊的這麼寫// if(fullScreen.save("/savescreen.jpg","JPG"))// qDebug("----------save screen success----------");/**************以下幾步是針對嵌入式系統,映像位元有限制,轉為了8位的映像,PC端可以不需要**************/ QImage image = fullScreen.toImage();// image = image.copy(x,y,w,h); //截取地區改這裡 //轉8位 image = image.convertToFormat(QImage::Format_Indexed8,Qt::AutoColor); //image.save(fileName,"JPG") 需要有儲存對話方塊的這麼寫 if(image.save("/savescreen.jpg","JPG")) qDebug("----------save screen success----------");
以上的代碼,只要寫在一個空的工程裡,就能運行了,我是在嵌入式的linux下運行,所以會有映像位元的限制,要轉一下QImage降低位元,我直接儲存在了固定的路徑,名稱也固定了,運行一次截一次圖,這樣就是最小最簡潔的了
然後我把各種需要擴充的地方都做了注釋,比如要自己寫介面設定地區的,我標了在哪裡改,自己要寫儲存路徑的,我也標出來在哪裡改,要是在PC端啟動並執行,可以直接儲存QPixmap。
僅希望對別人有所協助