gpt4 book ai didi

c - 使用完帧缓冲区后如何恢复控制台测试?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:09 27 4
gpt4 key购买 nike

我正在使用 ioctl 写入帧缓冲区,它运行良好。

然而,当我关闭它时,图像仍在屏幕上。我想将控制台文本恢复到写入缓冲区之前的状态。有人知道怎么做吗?下面的代码是我正在使用的;

  struct fb_var_screeninfo vinfo;


fbfd = open("/dev/fb0", O_RDWR);
if (!fbfd) {
printf("Error: cannot open framebuffer device.\n");
return(1);
}

// Get variable screen information
if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) {
printf("Error reading variable information.\n");
}
printf("Original %dx%d, %dbpp\n", vinfo.xres, vinfo.yres,
vinfo.bits_per_pixel );


// map fb to user mem
screensize = finfo.smem_len;
fbp = (char*)mmap(0,
screensize,
PROT_READ | PROT_WRITE,
MAP_SHARED,
fbfd,
0);

if ((int)fbp == -1) {
printf("Failed to mmap.\n");
}
else {
// draw...some lines
int x, y;
unsigned int pix_offset;

for (y = 0; y < (vinfo.yres / 2); y++) {
for (x = 0; x < vinfo.xres; x++) {

// calculate the pixel's byte offset inside the buffer
// see the image above in the blog...
pix_offset = x + y * finfo.line_length;

// now this is about the same as fbp[pix_offset] = value
*((char*)(fbp + pix_offset)) = 16 * x / vinfo.xres;

}
}

sleep(5);
}

// cleanup
munmap(fbp, screensize);
if (ioctl(fbfd, FBIOPUT_VSCREENINFO, &orig_vinfo)) {
printf("Error re-setting variable information.\n");
}
close(fbfd);

return 0;

}

最佳答案

我知道这个问题很老了,但我会为遇到这个问题的任何人(就像我一样)提供解决方案。

我通常做的是在写入之前获取屏幕截图:

cp/dev/fb0/tmp/orig_screen

当我使用完帧缓冲区后,我恢复之前的屏幕:

cp/tmp/orig_screen/dev/fb0

关于c - 使用完帧缓冲区后如何恢复控制台测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18563771/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com