2016-04-13 16 views
2

xvfbに奇妙な問題があります。基本的に私はそうのようなXVFBを通じて実行中のアプリケーションがあります。xvfbからピクセルデータを読み込む

Xvfb :1 -screen 0 1920x1080x24+32 -fbdir /var/tmp & 
export DISPLAY=:1 
gimp & 

をそして私は、このようなファイルからの画素データ読み込み:私は最初の1000個の要素をプリントアウトしたときにいくつかの理由

#include <string> 
#include <string.h> 
#include <thread> 
#include <math.h> 
#include <fcntl.h> 
#include <linux/fb.h> 
#include <sys/mman.h> 
#include <sys/ioctl.h> 
#include <unistd.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <iostream> 

using namespace std; 

char *fbp1 = 0; 
int fbfd1; 
long int screensize1; 

int main() { 
     fbfd1 = 0; 
     screensize1 = 0; 
     fbfd1 = open("/var/tmp/Xvfb_screen0", O_RDWR); 

     screensize1 = 1920 * 1080 * 4; 
     fbp1 = (char*)mmap(0, 
       screensize1, 
       PROT_READ | PROT_WRITE, 
       MAP_SHARED, 
       fbfd1, 
       0); 

     for (int i = 0; i < 1000; i++) { 
       cout << ((int*)fbp1)[i] << endl; 
     } 
     return 0; 
} 

をかバッファのために、スクリーン上の実際のビジュアルの印刷を開始する前に、多数のランダムなデータを出力します。

ご協力いただければ幸いです!

+0

'open()'、 'mmap()'などの戻り値をテストすることをお勧めします。そして、マジックナンバー( '4'は 'sizeof(int)'の値を文書化してくださいあなたは 'int * fbp1'と' sizeof * fbp1'と書くことができます)。 –

答えて

2

hereのように、ファイルはピクセル配列ではなく、xwd formatです。

このフォーマットの詳細については、プラットフォーム固有のxwdfile.hヘッダーでご確認ください。 xwudあなたの前でどのように行われたかを知るためのユーティリティーソース。

+0

ありがとうございます!これはまさに私が探していたものでした! – ktb92677

関連する問題