Чтение пиксельных данных из xvfb

У меня странная проблема с xvfb. В основном у меня есть приложение, работающее через xvfb, вот так:

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

И тогда я читаю данные пикселей из файла следующим образом:

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

По какой-то причине, когда я печатаю первые 1000 элементов или около того из буфера, он печатает кучу случайных данных, прежде чем он начнет печатать фактическое изображение на экране.

Любая помощь будет принята с благодарностью!

2

Решение

Как указано Вот, Ваш файл не просто массив пикселей, но в формат xwd.

Вы можете узнать больше об этом формате в вашей платформе xwdfile.h заголовок и использовать, например, xwud Утилита источник, чтобы узнать, как это было сделано перед вами.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]