欢迎光临散文网 会员登陆 & 注册

【教程】雷蛇键盘灯播放视频

2021-02-05 19:04 作者:水橋パルスィOfficial  | 我要投稿

准备工作

  1. 准备一把雷蛇 RGB 键盘

  2. 下载并安装 Razer Synapse 雷云

  3. 下载 Razer Chroma SDK Sample Application(当然,也可以直接下SDK)

  4. 下载并安装 Microsoft Visual Studio(可选,如果你喜欢折腾)

Step 0

可能有小伙伴会问为什么不直接用 Chroma Studio 里的环境感知效果,或者使用 Wallpaper Engine 的联动效果。

Chroma Studio

当然也是可以的。不会你会发现即使把混合属性拉到最左边(锐利),也根本看不清视频的内容。

这个效果可能更加适合日常使用,可以实现一个自适应亮度的效果,即屏幕越亮,键盘灯越亮,屏幕越暗,键盘灯越暗。

Step 1

要实现近似这两个视频中的效果,其实只有一个 step 。

找到 Sample Application 中 Release 文件夹下的 RazerChromaSampleApplication.exe ,运行并点击 Ambient effect - Start Ambient Effect 即可。

RazerChromaSampleApplication.exe

现在你的键盘就会显示屏幕上的内容了。

Step 2

那么为什么我说是近似呢,因为我对这个程序的内容进行了一些修改。

太长不看的小伙伴可以直接在文章末尾下载修改后的程序。

首先我们来看一下官方的程序是怎么写的。

实现 Ambient Effect 的部分在 AmbientEffectDlg.cpp 的 _CreateAmbientFx1 函数中:


DeviceType 表示的是需要控制的设备种类,为 1 时表示键盘,这里为了方便只保留了键盘的逻辑部分。

13 至 25 行,获取屏幕的分辨率信息并进行一些初始化;

29 至 61 行,设置如何缩放屏幕内容;

63 至 83 行,将缩放的屏幕直接显示在键盘上;

87 行的 Sleep 控制刷新速度。

首先注意一下缩放的部分:

32 行的 SetStretchBltMode 指定拉伸模式为 HALFTONE ;

37 至 39 行,进行缩放并上下翻转。

SetStretchBltMode 能够指定 4 种本质不同的拉伸模式:COLORONCOLOR、HALFTONE、BLACKONWHITE、WHITEONBLACK。

其中后两者类似 PS 中的变暗和变亮,在每个区域内取出最暗/亮的像素,完全不适合播放视频。

COLORONCOLOR 相当于直接采样,固定间隔抽取像素,其他像素直接丢弃;

HALFTONE 在缩小图像时,每个像素是其对应区域内颜色的平均值,是最为常用的拉伸模式,但处理速度最慢。

我尝试了这几种拉伸模式,HALFTONE 对于单幅静止画面的表现是最佳的,而在图像连续运动时,COLORONCOLOR 的表现效果则更佳。HALFTONE 的平均操作容易将画面中的一些细节抹去;COLORONCOLOR 在图像连贯运动的过程中能够较好的展现出细节,但在画面趋于静止时,画面容易崩坏。

HALFTONE 模式下的 Calamity Fortune,颜色比较平淡
COLORONCOLOR 模式下的 Calamity Fortune,颜色的对比更加强烈,播放时有星光闪烁感
HALFTONE 模式下的 MARENOL,效果很好
COLORONCOLOR 模式下的 MARENOL,残缺不全

最早我使用的测试视频为 Daisuke,在 HALFTONE 模式下人物的手部动作不能很好的看出来。而在 COLORONCOLOR 模式下,虽然有些支离破碎的感觉,但手部的运动基本都能看出来了。因此之后我均选用了 COLORONCOLOR 模式。

当然,在其他一些视频中,原来的 HALFTONE 模式效果可能会更佳。两种模式各有优劣,考虑到多方面因素(视频内容、处理速度,以及接下来的一个 step),我还是选择了 COLORONCOLOR 模式。

Step 3

考虑进一步优化,我发现了这样一个事实。

这个程序是把键盘当作一块 8 × 24 (实际只用到了 6 × 21)的屏幕进行显示。

但我们都知道:

键盘每个按键在程序中对应的位置编号,最左侧为行号,按键上为列号

在键盘的主要部分,按键在纵向并不是直线摆放的,因此这样会造成视频的一些扭曲。

为了修正这个扭曲,我对键盘和像素进行了重新映射。

首先我从某电商平台找到了一张键盘的俯视(平面?)图:

键盘俯视图

然后截取键盘部分,缩放宽度至 1080 ,测量每个按键的中心点横坐标。

于是我得到了这样的一个矩阵:

神秘矩阵

然后修改缩放结果为 6 × 1080,对于每个键盘灯读取所在行对应横坐标的像素颜色。


即得到最终我所使用的程序。

HALFTONE 模式也可以进行类似的修正,但是会更加麻烦一些,需要计算每个键对应的区域及区域中的平均颜色。

总结

其实直接用 Sample Application 的效果已经相当不错了。

如果你更喜欢修改后的效果,可以下载这个程序:

链接:https://pan.baidu.com/s/13gmR9QStHR_iv-Svi-PiBg

提取码:6juc

修改后的源代码:

链接:https://pan.baidu.com/s/11mQOBc4-5Tmis5fOu0BSgg

提取码:efct

所以其实我基本没有写什么代码,确实没有什么技术力。有时间了再写一些有意思的灯光效果吧(比如在键盘上玩游戏)。

【教程】雷蛇键盘灯播放视频的评论 (共 条)

分享到微博请遵守国家法律