如何在C中更改显示屏上的像素?
假设没有:我在控制台上使用linux机器来执行此操作.我不想使用GUI工具包或框架来绘制像素.我不想在窗口中绘制像素.我想直接将像素绘制到屏幕上.
编辑:我有一个屏幕.我在从控制台运行Linux的笔记本电脑上.我更喜欢不使用X的解决方案,因为我宁愿学习X如何工作而不是如何使用X.
如果有更多信息,请询问,但不要假设.我不打算构建一个GUI,这是阻止假设的主要目的,因为我不希望人们认为我在做很长的事情,而实际上我只是在修修补补.
编辑2:您可以使用任何X11相关库,前提是您可以解释它们的工作原理.
Pau*_*ams 13
C没有任何图形功能 - 您需要使用第三方库.
Dav*_*Yaw 12
如果我们真的没有假设,我们甚至可以假设X正在运行吗?就此而言,我们甚至可以假设有一个视频卡吗?也许Linux运行无头,我们通过串行控制台访问它.
如果允许我们假设一些事情,那么我们假设Linux已经启动了framebuffer支持.(自从我使用Linux framebuffers以来已经有几年了,我可能会错误地了解一些细节.)可能会创建一个设备,/dev/fb或者/dev/fb0.打开该文件并开始在偏移量处写入RGB值,屏幕将发生变化,几乎无论如何:文本控制台,图形控制台,成熟的桌面环境等.如果您想查看帧缓冲支持是否有效,请执行此操作dd if=/dev/zero of=/dev/fb在命令行上,显示应该全黑.
你不能假设在C中显示.实际上没有办法做你所要求的.
编辑:好的,你有一个显示器,但同样,你可以从那里得到很多.重点是图形显示有一些竞争标准,虽然其中一些(例如VGA接口)是标准化的,但很多其他(例如显示驱动程序接口)都不是.X(以及其他显示设备驱动程序,例如Windows等)所做的大部分都具有用于如何与显示驱动程序通信的特定接口代码; 他们抽象出处理显示驱动程序的复杂性.然而,窗口系统具有巨大的复杂和特定代码库,用于处理显示驱动程序; 这些东西相对透明的事实表明他们随着时间的推移将这些东西投入了多少工作.
很原始,做了很多假设:
fd = open("/dev/fb0", O_RDWR);
lseek(fd, 640*y+x, SEEK_SET);
write(fd, "\377\377\377\377", 4);
Run Code Online (Sandbox Code Playgroud)
实际上,您将使用mmap而不是write,并使用适当ioctl的查询屏幕模式而不是假设640xHHH 32bpp.还有端序问题等.
所以在现实中,您可能会使用某种类型的库代码来处理这类事情.