8

Linux ベースの組み込みシステムに取り組んでいます。ウィンドウ処理に Qt を使用し、Xserver はありません。私の目的は、画面のスクリーンショットを撮ることです。

FBgrab を使ってみました。/dev/fb0フレームバッファがカーネルで有効になっていないため、持っていないため失敗しました。画面 (HDMI) に UI を表示する Qt ベースのアプリケーションを実行しています。また、QPixmap とグラブ ウィンドウを使用する QT Web サイトのスクリーン ショット アプリケーションも試しました。ディスプレイに影響するため、システムで 2 つの QAppliction を実行できないため、これも失敗です。

スクリーンショットを取得する他の方法はありますか?

4

2 に答える 2

1

イベントまたはコマンドに基づいて、アプリケーションに自身のスクリーンショットを撮らせることができます。これを行うには、ウィジェットをピックスマップにグラブし、このピックスマップをどこかに保存します。例えば:

QWidget *widget = QApplication::activeWindow();
QPixmap pixmap = QPixmap::grabWidget(widget);
pixmap.save(QString("/path/to/screenshot/screenshot.png"));
于 2014-02-09T18:12:33.813 に答える
0

ビデオ ソフトウェア スタックが完全にカスタム化されていないと仮定すると、Linux ビデオ ドライバーは FBDEV ドライバーまたは DRI ドライバーのいずれかになります。これを確認するには、ライブボックスで /dev/fb0 ファイルまたは /dev/dri/ フォルダーを検索するように伝えますが、組み込みデバイスでは簡単に名前を変更できるため、知る唯一の方法はビデオ デバイス ドライバー ソースを確認します (FBDEV の場合は drivers/video/ にあり、DRI の場合は /drivers/gpu/drm にあります)。

それらが FBDEV の場合、/dev/fb0 は別の名前であるはずです。それらが DRI の場合でも、Linux カーネルをビルドするときに DRM_FBDEV_EMULATION オプションを有効にして、FBgrab で信頼できる FBDEV デバイス ノードを使用できます。

于 2016-04-07T12:15:05.787 に答える