修圖工具中的色彩平衡一般用來根據亮度等級調整中顏色的偏色,調整偏色涉及到加色原理和減色原理
其實我們通過三原色加色原理的就可以知道,紅色的對比色是青色,藍色的對比色是黃色,綠色的對比色是品紅,這樣說可能不太直觀,其實我們只要試一下,把的r值整體提高,會偏紅(廢話),降低r值,會偏青色,g通道和b通道同理,或者,我們用白色(255, 255, 255)減去紅色(255, 0, 0),,得到了(0, 255, 255)青色,實際上紅色就是青色的反相,在色相環也是正對面的顏色。
為了對三個亮度進行不同程度的偏色調整,我們需要拿到乙個顏色每個通道的值對應的三個亮度的權重,舉個例子,乙個r值為127,那麼這個值的陰影調整的權重就應該比較低,中亮調整的權重應該比較高,高亮調整的權重應該比較低,那麼我調整中亮的紅黃拉桿的時候,對這個顏色的影響是比較大的,如果這個r值是高亮部分的(比如250),那麼調整中亮的紅黃拉桿對這個顏色的影響就很小(實際上是0),調整高亮的紅黃拉桿影響就比較大。
可以看到,調節高亮拉桿對影響是比較大的,說明這幅圖中r值比較高的畫素較多,但是有的區域無論是調整高亮的拉桿還是調整中亮的拉桿都會被影響,這是因為三個亮度的權重並不是你一我零,色彩平衡的調整並不是把畫素的值嚴格按三個等級區分開進行調整,只是說調整的權重有高有低
這個是接下來會講到的權重的對映,x軸為某個通道的值,紅綠藍三種顏色分別代表陰影,中亮,高亮的權重的變化曲線
gimp計算權重的**
static void
color_balance_transfer_init (void)
}
這段**是gimp裡生成三種亮度等級的權重對映,實際上對映出來的權重我們也可以用gimp的公式單獨計算出來
glsl計算權重的**
vec3 transfer(float value)
該對映的曲線![](https://pic.w3help.cc/380/21e2523ade0e4e64e1c8eaa4fa8a3.jpeg)
紅色曲線為陰影的權重對映
綠色曲線為中亮的權重對映
藍色曲線為高亮的權重對映
計算的時候將每個通道的值加上這個通道的三種亮度的權重乘上對應的拉桿值就行了
最後如果要保持亮度的話就呼叫一下rgb與hsl的轉換函式就好,拉桿的取值範圍是[-100, 100]
**:
precision mediump float;
varying mediump vec2 texturecoordinate;
uniform sampler2d inputimagetexture;
uniform float cyan_red_shadow;
uniform float cyan_red_midtones;
uniform float cyan_red_highlights;
uniform float magenta_green_shadow;
uniform float magenta_green_midtones;
uniform float magenta_green_highlights;
uniform float yellow_blue_shadow;
uniform float yellow_blue_midtones;
uniform float yellow_blue_highlights;
vec3 transfer(float value)
vec3 rgb2hsl(vec3 color)
//hsla轉rgb
vec3 hsl2rgb(vec3 color)
void main()
erlang原始碼參考
1 資料型別的記憶體 2 siyao同學一系列介紹資料型別實現的文章 erlang資料型別的表示和實現 1 資料型別回顧 erlang資料型別的表示和實現 2 eterm 和立即數 erlang資料型別的表示和實現 3 列表 erlang資料型別的表示和實現 4 boxed 物件 erlang資料型...
原始碼分析參考 Dupefilter
負責執行requst的去重,實現的很有技巧性,使用的redis的設定資料結構。但是注意排程並不使用其中用於在這個模組中實現的dupefilter鍵做請求的排程,而是使用queue.py模組中實現的佇列。當請求不重複時,將其存入到佇列中,排程時將其彈出。這個檔案看起來比較複雜,重寫了scrapy本身已...
Spring原始碼學習參考
spring源 解析 一 ioc容器 spring源 解析 二 ioc容器在web容器中的啟動 spring源 解析 三 spring jdbc spring源 解析 四 spring mvc spring源 解析 五 spring aop獲取proxy spring源 解析 六 spring宣告式...