【教程】雷蛇鍵盤(pán)燈播放視頻

準(zhǔn)備工作
準(zhǔn)備一把雷蛇 RGB 鍵盤(pán)
下載并安裝 Razer Synapse 雷云
下載 Razer Chroma SDK Sample Application(當(dāng)然,也可以直接下SDK)
下載并安裝 Microsoft Visual Studio(可選,如果你喜歡折騰)
Step 0
可能有小伙伴會(huì)問(wèn)為什么不直接用 Chroma Studio 里的環(huán)境感知效果,或者使用 Wallpaper Engine 的聯(lián)動(dòng)效果。

當(dāng)然也是可以的。不會(huì)你會(huì)發(fā)現(xiàn)即使把混合屬性拉到最左邊(銳利),也根本看不清視頻的內(nèi)容。
這個(gè)效果可能更加適合日常使用,可以實(shí)現(xiàn)一個(gè)自適應(yīng)亮度的效果,即屏幕越亮,鍵盤(pán)燈越亮,屏幕越暗,鍵盤(pán)燈越暗。
Step 1
要實(shí)現(xiàn)近似這兩個(gè)視頻中的效果,其實(shí)只有一個(gè)?step?。


找到?Sample Application 中 Release 文件夾下的?RazerChromaSampleApplication.exe?,運(yùn)行并點(diǎn)擊 Ambient effect - Start?Ambient Effect 即可。

現(xiàn)在你的鍵盤(pán)就會(huì)顯示屏幕上的內(nèi)容了。
Step 2
那么為什么我說(shuō)是近似呢,因?yàn)槲覍?duì)這個(gè)程序的內(nèi)容進(jìn)行了一些修改。
太長(zhǎng)不看的小伙伴可以直接在文章末尾下載修改后的程序。
首先我們來(lái)看一下官方的程序是怎么寫(xiě)的。
實(shí)現(xiàn) Ambient Effect 的部分在 AmbientEffectDlg.cpp?的 _CreateAmbientFx1 函數(shù)中:


DeviceType 表示的是需要控制的設(shè)備種類(lèi),為 1 時(shí)表示鍵盤(pán),這里為了方便只保留了鍵盤(pán)的邏輯部分。
13 至 25 行,獲取屏幕的分辨率信息并進(jìn)行一些初始化;
29 至 61 行,設(shè)置如何縮放屏幕內(nèi)容;
63 至 83 行,將縮放的屏幕直接顯示在鍵盤(pán)上;
87 行的 Sleep 控制刷新速度。
首先注意一下縮放的部分:
32 行的 SetStretchBltMode 指定拉伸模式為?HALFTONE ;
37 至 39 行,進(jìn)行縮放并上下翻轉(zhuǎn)。
SetStretchBltMode 能夠指定?4 種本質(zhì)不同的拉伸模式:COLORONCOLOR、HALFTONE、BLACKONWHITE、WHITEONBLACK。
其中后兩者類(lèi)似 PS 中的變暗和變亮,在每個(gè)區(qū)域內(nèi)取出最暗/亮的像素,完全不適合播放視頻。
COLORONCOLOR 相當(dāng)于直接采樣,固定間隔抽取像素,其他像素直接丟棄;
HALFTONE 在縮小圖像時(shí),每個(gè)像素是其對(duì)應(yīng)區(qū)域內(nèi)顏色的平均值,是最為常用的拉伸模式,但處理速度最慢。
我嘗試了這幾種拉伸模式,HALFTONE 對(duì)于單幅靜止畫(huà)面的表現(xiàn)是最佳的,而在圖像連續(xù)運(yùn)動(dòng)時(shí),COLORONCOLOR 的表現(xiàn)效果則更佳。HALFTONE 的平均操作容易將畫(huà)面中的一些細(xì)節(jié)抹去;COLORONCOLOR 在圖像連貫運(yùn)動(dòng)的過(guò)程中能夠較好的展現(xiàn)出細(xì)節(jié),但在畫(huà)面趨于靜止時(shí),畫(huà)面容易崩壞。




最早我使用的測(cè)試視頻為 Daisuke,在 HALFTONE 模式下人物的手部動(dòng)作不能很好的看出來(lái)。而在 COLORONCOLOR?模式下,雖然有些支離破碎的感覺(jué),但手部的運(yùn)動(dòng)基本都能看出來(lái)了。因此之后我均選用了?COLORONCOLOR 模式。
當(dāng)然,在其他一些視頻中,原來(lái)的 HALFTONE 模式效果可能會(huì)更佳。兩種模式各有優(yōu)劣,考慮到多方面因素(視頻內(nèi)容、處理速度,以及接下來(lái)的一個(gè) step),我還是選擇了?COLORONCOLOR?模式。
Step 3
考慮進(jìn)一步優(yōu)化,我發(fā)現(xiàn)了這樣一個(gè)事實(shí)。
這個(gè)程序是把鍵盤(pán)當(dāng)作一塊?8?×?24 (實(shí)際只用到了 6 × 21)的屏幕進(jìn)行顯示。
但我們都知道:

在鍵盤(pán)的主要部分,按鍵在縱向并不是直線(xiàn)擺放的,因此這樣會(huì)造成視頻的一些扭曲。
為了修正這個(gè)扭曲,我對(duì)鍵盤(pán)和像素進(jìn)行了重新映射。
首先我從某電商平臺(tái)找到了一張鍵盤(pán)的俯視(平面?)圖:

然后截取鍵盤(pán)部分,縮放寬度至 1080 ,測(cè)量每個(gè)按鍵的中心點(diǎn)橫坐標(biāo)。
于是我得到了這樣的一個(gè)矩陣:

然后修改縮放結(jié)果為 6 × 1080,對(duì)于每個(gè)鍵盤(pán)燈讀取所在行對(duì)應(yīng)橫坐標(biāo)的像素顏色。

即得到最終我所使用的程序。
HALFTONE 模式也可以進(jìn)行類(lèi)似的修正,但是會(huì)更加麻煩一些,需要計(jì)算每個(gè)鍵對(duì)應(yīng)的區(qū)域及區(qū)域中的平均顏色。
總結(jié)
其實(shí)直接用?Sample Application 的效果已經(jīng)相當(dāng)不錯(cuò)了。
如果你更喜歡修改后的效果,可以下載這個(gè)程序:
鏈接:https://pan.baidu.com/s/13gmR9QStHR_iv-Svi-PiBg
提取碼:6juc
修改后的源代碼:
鏈接:https://pan.baidu.com/s/11mQOBc4-5Tmis5fOu0BSgg
提取碼:efct
所以其實(shí)我基本沒(méi)有寫(xiě)什么代碼,確實(shí)沒(méi)有什么技術(shù)力。有時(shí)間了再寫(xiě)一些有意思的燈光效果吧(比如在鍵盤(pán)上玩游戲)。