是否有任何低级方式在屏幕上绘制像素?

时间:2017-04-06 05:35:58

标签: c++ c

我所知道的大多数便携式GUI和图形库似乎只为他们正在运行的操作系统调用不同的API函数,我想知道是否有某种形式的便携式(或非便携式)方式直接与视频内存对话以便能够将像素绘制到屏幕上,或者操作系统是否隐藏了该功能而您只能调用其API函数?

6 个答案:

答案 0 :(得分:3)

如果您想玩游戏,可以在非常便宜的Raspberry Pi上进行游戏。我用了一点Waveshare 3.5"采用RPi液晶显示器,尺寸为320x480像素,价格约为30美元

enter image description here

屏幕显示为/dev/fb/0(或者1),如果你ssh进入Raspberry Pi(而不是在屏幕上运行X11,你将要搞砸) ,你可以随心所欲地展开你喜欢的任何东西。

例如,如果你想清除它,你只需要发送一堆零 - 我当前没有连接它,所以我不能轻易检查,但它就像:

sudo dd if=/dev/zero of=/dev/fb0

如果您想将屏幕亮起白色,请发送1 s:

sudo dd if=/dev/zero | tr '\0' '\377' > /dev/fb1

如果要使用颜色绘制任何特定像素,只需从开始计算偏移量并写入16位RGB565像素。您可以在C或终端中执行以下操作:

echo -e "\x15" | dd of=/dev/fb0 bs=2 skip=348

有一个精彩,有趣的教程here

另一种选择是使用VirtualBox并安装可以进入的Linux发行版,然后使用this example在整个帧缓冲区中编写。

答案 1 :(得分:2)

我知道的一个解决方案是直接操作帧缓冲区(linux / fb.h)。

您可以通过在Google中搜索“framebuffer draw pixels”来找到一些示例。

答案 2 :(得分:2)

在屏幕上绘制像素意味着要在GPU帧缓冲区中写入,这是位于卡中的内存区域。 要实现这一点,您可以使用CUDA(仅限NVIDIA GPU),OpenGL(开源)。 话虽这么说,其中两个是编程框架,而不是最容易处理。我不知道你想要实现什么,但是准备好听一段时间。

答案 3 :(得分:2)

我知道的最后一个允许直接视频访问用户程序的系统是很好的旧MS / DOS。我认为,像FreeDOS这样的衍生品仍然允许这样做。问题是在现代操作系统中,进程只能访问自己的内存,并且必须要求操作系统进行任何其他内存访问。由于视频由许多进程(包括系统进程)共享,因此只有系统API可以直接控制它。

您通常可以找到API,它允许您在视频内存的副本上绘制位图,然后刷新它,或提供更高级别的访问。根据系统的不同,您甚至可以找到将实际视频内存映射到地址空间的API。但你必须首先亲切地问内核......

答案 4 :(得分:2)

直接修改屏幕你应该使用GPU编程语言(通过#include正确的库从C访问)

GPU编程语言非常广泛,是学习的主要方法,但您可以将它用于您需要做的事情,包括在GPU和CPU之间传输数据,编程算法,获取当前位置等窗口,设置多个窗口图像,并在“消隐”期间切换它们。追溯时间,处理精灵等等。

答案 5 :(得分:1)

有一个旧文件"graphics.h",其中包含旧版本的c ++(Borland c ++ builder等...),就我记忆而言,它是非常低级的

现在有Gdi+ in VS,它还允许你创建简单的图形:行像素等...(它似乎只是窗口,而不是低级别)

所以你可以试试这两个链接,可能会有所帮助