是否可以访问帧缓冲区以便从命令行在屏幕上放置像素?

是否可以访问帧缓冲区以便从命令行在屏幕上放置像素?

我不确定这是否是唯一可能的方法,但我读到,为了将单个像素放在屏幕上您选择的位置上,必须在称为帧缓冲区的地方写入一些内容。所以我很好奇,是否有可能进入这个地方并向其中写入一些内容以便在屏幕上的某个位置显示单个像素。

答案1

是的,在 X-server 之外,在 tty 中,尝试命令:

cat /dev/urandom >/dev/fb0

如果彩色像素填满屏幕,那么您的设置就可以了,您可以尝试使用这个小脚本:

#!/usr/bin/env bash

fbdev=/dev/fb0 ;   width=1280 ; bpp=4
color="\x00\x00\xFF\x00" #red colored

function pixel()
{  xx=$1 ; yy=$2
   printf "$color" | dd bs=$bpp seek=$(($yy * $width + $xx)) \
                        of=$fbdev &>/dev/null
}
x=0 ; y=0 ; clear
for i in {1..500}; do
   pixel $((x++)) $((y++))
done

其中函数“pixel”应该是一个答案...通过更改设备 /dev/fbX(视频卡的帧缓冲区)的 xy 偏移上的字节值(蓝-绿-红-alpha)将像素写入屏幕。

或者尝试绘制一个线性像素(如果宽度为 1024,则 x:y=200:100 上呈黄色):

printf "\x00\xFF\xFF\x00" | dd bs=4 seek=$((100 * 1024 + 200)) >/dev/fb0

更新:这段代码甚至可以在 X-server 内部工作,如果我们只是配置 X 使用帧缓冲区。通过在 /usr/share/X11/xorg.conf.d/99-fbdev.conf 中指定 fb0

答案2

我今天早上刚刚发布了这篇文章,仍在调查为什么它只适用于 Raspberry Pi。 https://www.raspberrypi.org/forums/viewtopic.php?f=72&t=213964&p=1428891#p1428891

打开/dev/fb0,mmap它,这样你就可以获得一个指针,而且速度要快得多。根本不使用X,但它会很高兴地忽略X,它只是屏幕上的东西。

哦,从某种意义上说,您可以从命令行写入 /dev/fb0。但无论您在偏移量 0 处写入什么内容,都将位于左上角,因此它会立即滚出屏幕。您可以在 Bash 中执行 for 循环并写入几千次。或者使用/dev/urandom。销毁屏幕缓冲区中的内容,尤其是当您在 X 中时,没什么大不了的。一旦您将窗口拖到区域 X 上,就会引发暴露事件并重新绘制它。你不需要杀死恢复的力量。

相关内容