我似乎无法修改帧缓冲
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 字节的缓冲区空间。考虑以下案头检查
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;
}
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 独立读取-修改-写入顺序
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 修改函数中的指针(将另一个指针作为参数传递)
- 为什么我可以通过引用修改常量返回
- 对于结构,表达式必须是可修改的ivalue
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 修改创建帐户程序
- 我应该如何修改此代码以使用给定字符串中的字母打印菱形图案
- 如何使用原子指针执行双缓冲
- 如何从子成员函数修改父公共成员变量
- 修改 VS Code 中的默认C++代码段
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- 如何使用递归打印修改后的星号三角形图案
- 已修改的LinkedList未在文本文件本身中更新
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 为什么可以修改数组 b?
- 我似乎无法修改帧缓冲
- 在顶点着色器中修改着色器存储缓冲对象