我似乎无法修改帧缓冲区
I cannot seem to modify the framebuffer
我正在尝试修改 Linux 上的帧缓冲区。我正在通过虚拟终端 (tty) 运行 连接程序。我似乎无法修改我想要的像素。这是我的代码:
#include <stdio.h>
unsigned char buffer[4 * 1366 * 768];
const int framewidth = 1366;
void placepixel(int x, int y, int r, int g, int b, int a){
buffer[(framewidth * y) + x] = b;
buffer[(framewidth * y) + x+1] = g;
buffer[(framewidth * y) + x+2] = r;
buffer[(framewidth * y) + x+3] = a;
}
void placepixelbynum(int i, int r, int g, int b, int a){
buffer[i] = b;
buffer[i+1] = g;
buffer[i+2] = r;
buffer[i+3] = a;
}
int main(){
for(int i = 0; i < 4 * 1366 * 768; i+=4){
placepixelbynum(i, 50,50,50,0);
}
FILE *write_ptr;
write_ptr = fopen("/dev/fb0","wb");
int x, y, z, xr, yr, zr;
while(true){
for(int i = 0; i < 128; i++){
placepixel(128+i,128,255,0,0,0);
}
fwrite(buffer,sizeof(buffer),1,write_ptr);
}
return 0;
}
当我 运行 这样做时,屏幕变灰(如预期的那样),但该行未放在我预期的位置。 (我希望它从 128x128 开始到 256x128 结束),但它靠近屏幕的右端。
问题的出现似乎是因为未能为每个像素解释 4 个字节的缓冲区-space。考虑以下案头检查
pixel(0,0)
(framewidth*y) + x + 0 -> 0
(framewidth*y) + x + 1 -> 1
(framewidth*y) + x + 2 -> 2
(framewidth*y) + x + 3 -> 3
pixel(1,0)
(framewidth*y) + x + 0 -> 1
(framewidth*y) + x + 1 -> 2
(framewidth*y) + x + 2 -> 3
(framewidth*y) + x + 3 -> 4
我猜你会通过这样的方式获得更多的成功:
void placePixel(int x, int y, int r, int g, int b, int a)
{
int index = 4 * ((frameWidth*y) + x)
buffer[index+0] = r;
buffer[index+1] = g;
buffer[index+2] = b;
buffer[index+3] = a;
}
我正在尝试修改 Linux 上的帧缓冲区。我正在通过虚拟终端 (tty) 运行 连接程序。我似乎无法修改我想要的像素。这是我的代码:
#include <stdio.h>
unsigned char buffer[4 * 1366 * 768];
const int framewidth = 1366;
void placepixel(int x, int y, int r, int g, int b, int a){
buffer[(framewidth * y) + x] = b;
buffer[(framewidth * y) + x+1] = g;
buffer[(framewidth * y) + x+2] = r;
buffer[(framewidth * y) + x+3] = a;
}
void placepixelbynum(int i, int r, int g, int b, int a){
buffer[i] = b;
buffer[i+1] = g;
buffer[i+2] = r;
buffer[i+3] = a;
}
int main(){
for(int i = 0; i < 4 * 1366 * 768; i+=4){
placepixelbynum(i, 50,50,50,0);
}
FILE *write_ptr;
write_ptr = fopen("/dev/fb0","wb");
int x, y, z, xr, yr, zr;
while(true){
for(int i = 0; i < 128; i++){
placepixel(128+i,128,255,0,0,0);
}
fwrite(buffer,sizeof(buffer),1,write_ptr);
}
return 0;
}
当我 运行 这样做时,屏幕变灰(如预期的那样),但该行未放在我预期的位置。 (我希望它从 128x128 开始到 256x128 结束),但它靠近屏幕的右端。
问题的出现似乎是因为未能为每个像素解释 4 个字节的缓冲区-space。考虑以下案头检查
pixel(0,0)
(framewidth*y) + x + 0 -> 0
(framewidth*y) + x + 1 -> 1
(framewidth*y) + x + 2 -> 2
(framewidth*y) + x + 3 -> 3
pixel(1,0)
(framewidth*y) + x + 0 -> 1
(framewidth*y) + x + 1 -> 2
(framewidth*y) + x + 2 -> 3
(framewidth*y) + x + 3 -> 4
我猜你会通过这样的方式获得更多的成功:
void placePixel(int x, int y, int r, int g, int b, int a)
{
int index = 4 * ((frameWidth*y) + x)
buffer[index+0] = r;
buffer[index+1] = g;
buffer[index+2] = b;
buffer[index+3] = a;
}