2016-04-13 23 views
2

Bu yüzden xvfb ile garip bir sorun yaşıyorum. Temelde ben bir uygulama şöyle xvfb üzerinden çalışan var: Ben ilk 1000 unsurları çıktısını veyaxvfb öğesinden okuma pixel verileri

#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; 
} 

Nedense: o zaman

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

Ve ben böyle dosyadan piksel verilerini okuma Arabellek, ekranda gerçek görüntüyü basmaya başlamadan önce bir grup rastgele veriyi yazdırır.

Herhangi bir yardım çok takdir edilecektir!

+0

Bir kenara göre, 'open()', 'mmap()' vb. Dönüş değerlerini sınamanızı öneririm. Ve sihirli sayıları belgelendiririz ('' '' '' platform? - netlik için "int * fbp1" ve "sizeof * fbp1" yazabilirsiniz. –

cevap

2

Belirtildiği gibi here, dosyanız yalnızca bir piksel dizisi değil, xwd format'da.

Bu biçim hakkında daha fazla bilgiyi platforma özel xwdfile.h başlığından öğrenebilir ve örn. Önceden nasıl yapıldığını öğrenmek için xwud yardımcı program kaynağı.

+0

Çok teşekkür ederim! Tam olarak aradığım şey buydu! – ktb92677

İlgili konular