Linux 的 C 语言全屏操作
Whole screen manipulation in C for Linux
我正在寻找操纵整个屏幕的方法(例如更改色调、创建效果等),而不仅仅是一个 window 或单独的全屏输出。相反,您在屏幕、桌面、浏览器 windows 等上看到的一切都来自一个程序。 运行 作为 root 没有问题。
目的是用人类视觉进行神经学实验,而受试者正常使用计算机。
就像Magnus Johansson已经提到的,你可以为此使用伽玛补偿曲线。
有关如何使用 Xorg X 服务器完成此操作的详细信息,请查看 xrandr 实用程序源中的 set_gamma_info()
函数。该功能实现了伽玛校正和软件亮度控制,但它也可以实现色彩平衡。但是,它不能用绿色或蓝色替换红色,也不能进行基于色调的映射。
本质上,使用类似于
的查找table补偿每个红色、绿色和蓝色分量值
red_transmitted_to_display = red_lut[red_component];
green_transmitted_to_display = green_lut[green_component];
blue_transmitted_to_display = blue_lut[blue_component];
由硬件,零表示零强度,一些最大值表示最大强度。 xrandr 接口提供的函数可以告诉您查找 tables 中颜色分量的深度(每个条目有多少个条目),并自行获取和设置 tables。
如果你想做更细粒度的颜色映射,比如把深红色变成蓝色,但是把亮红色变成绿色,或者一般的色调映射,你应该限制对一些合成 window 管理器的支持,因为例子compiz。然后你需要实现一个 Compiz 插件,它作为像素着色器进行必要的颜色转换。
合成 window 管理器是使用内存缓冲区首先绘制显示内容,然后将该缓冲区绘制到实际显示或显示的管理器。
Compiz 支持插件,可以修改 windows 及其内容的显示方式,方法是在将数据发送到实际显示。一些插件会改变 windows/views/entire 屏幕的放置方式,从而产生 3D 效果。其他的,特别是 像素着色器 ,对显示的每个像素进行操作,并且可以以任何需要的方式处理它们的颜色。甚至可以只对某些 windows 而不是其他人应用操作,并在 运行 时间控制它。
我正在寻找操纵整个屏幕的方法(例如更改色调、创建效果等),而不仅仅是一个 window 或单独的全屏输出。相反,您在屏幕、桌面、浏览器 windows 等上看到的一切都来自一个程序。 运行 作为 root 没有问题。
目的是用人类视觉进行神经学实验,而受试者正常使用计算机。
就像Magnus Johansson已经提到的,你可以为此使用伽玛补偿曲线。
有关如何使用 Xorg X 服务器完成此操作的详细信息,请查看 xrandr 实用程序源中的 set_gamma_info()
函数。该功能实现了伽玛校正和软件亮度控制,但它也可以实现色彩平衡。但是,它不能用绿色或蓝色替换红色,也不能进行基于色调的映射。
本质上,使用类似于
的查找table补偿每个红色、绿色和蓝色分量值red_transmitted_to_display = red_lut[red_component];
green_transmitted_to_display = green_lut[green_component];
blue_transmitted_to_display = blue_lut[blue_component];
由硬件,零表示零强度,一些最大值表示最大强度。 xrandr 接口提供的函数可以告诉您查找 tables 中颜色分量的深度(每个条目有多少个条目),并自行获取和设置 tables。
如果你想做更细粒度的颜色映射,比如把深红色变成蓝色,但是把亮红色变成绿色,或者一般的色调映射,你应该限制对一些合成 window 管理器的支持,因为例子compiz。然后你需要实现一个 Compiz 插件,它作为像素着色器进行必要的颜色转换。
合成 window 管理器是使用内存缓冲区首先绘制显示内容,然后将该缓冲区绘制到实际显示或显示的管理器。
Compiz 支持插件,可以修改 windows 及其内容的显示方式,方法是在将数据发送到实际显示。一些插件会改变 windows/views/entire 屏幕的放置方式,从而产生 3D 效果。其他的,特别是 像素着色器 ,对显示的每个像素进行操作,并且可以以任何需要的方式处理它们的颜色。甚至可以只对某些 windows 而不是其他人应用操作,并在 运行 时间控制它。