我正在使用 HP Envy Touchsmart 笔记本电脑,使用 fwrite 标准 C 函数,在控制台模式下,Debian 10 访问屏幕的帧缓冲区 /dev/fb0。
我读了这个页面: https ://techoverflow.net/2015/06/21/querying-framebuffer-resolution-in-linux/
它指出“cat /sys/class/graphics/fb0/virtual_size”应该返回 fb0 的尺寸。
它返回 1366 x 768 像素。这是我的实际屏幕分辨率。到目前为止这么好。
但是当我写入 /dev/fb0 时,我实际上需要在开始新行之前写入 1376 个像素。
请注意,像素是 32 位数据包,因此看起来没有潜在的扫描线对齐问题。我们说的是10乘以4字节的差异,即40字节,这是很多的。
这种差异从何而来?如何获得扫描线宽度信息而无需肉眼查找?
您可能可以根据源
/sys/class/graphics/fb0/stride
找到其中行的长度(以字节为单位)的值。您需要除以除以 8 以获得以像素为单位的步幅。bits_per_pixel