日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Photoshop画笔的混合算法实现(逆推)

發布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Photoshop画笔的混合算法实现(逆推) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

說明

使用OpenGL在一張rgba都為0.0的紋理上開glBlend(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR)繪制線條后,再渲染到屏幕的時候發現有黑白。而PS的畫筆工具在透明圖層進行繪制的時候沒有出現黑邊。于是就有了研究PS顏色疊加混合的實現,下面只是推測…

PS的alpha疊加算法

在OpenGL表示為:glBlend(GL_ONE, GL_ONE_MINUS_SRC_COLOR)。

# sa: 要繪制上去的alpha # da: 已經在屏幕的alpha def psAlpha(sa, da):return (sa + (1.0 - sa) * da)

PS的顏色疊加算法

如果要使用OpenGL實現就必須使用gl_LastFragData[0]這個數據,或者自己實現類似獲取屏幕像素的rgba的功能。

# src: 要繪制上去的rgb # dst: 已經在屏幕上的rgb # sa: 要繪制上去的alpha # da: 已經在屏幕的alpha def psColor(src, dst, sa, da):alpha = ((1.0 - sa) * da) / psAlpha(sa, da)return (1.0 - alpha) * src + alpha * dst

完整代碼

import numpy as np# src: 要繪制上去的rgb # dst: 已經在屏幕上的rgb # sa: 要繪制上去的alpha # da: 已經在屏幕的alpha def psColor(src, dst, sa, da):alpha = (sa * da) / psAlpha(sa, da)return (1.0 - alpha) * src + alpha * dst# sa: 要繪制上去的alpha # da: 已經在屏幕的alpha def psAlpha(sa, da):return (sa + (1.0 - sa) * da)# dst沒有任何顏色的情況, 繪制第一個顏色 srcColor0 = np.array([70.0, 209.0, 201.0]) / 255.0 dstColor0 = np.array([0.0, 0.0, 0.0]) / 255.0 srcAlpha0 = 0.5 dstAlpha0 = 0.0# 繪制第一筆后: dst有顏色 dstColor1 = psColor(srcColor0, dstColor0, srcAlpha0, dstAlpha0) dstAlpha1 = psAlpha(srcAlpha0, dstAlpha0)# 繪制第二個顏色 srcColor1 = np.array([226.0, 69.0, 69.0]) / 255.0 srcAlpha1 = 0.5dstColor2 = psColor(srcColor1, dstColor1, srcAlpha1, dstAlpha1) dstAlpha2 = psAlpha(srcAlpha1, dstAlpha1)# 繪制第三個顏色 srcColor2 = np.array([255.0, 0.0, 204.0]) / 255.0 srcAlpha2 = 0.5 dstColor3 = psColor(srcColor2, dstColor2, srcAlpha2, dstAlpha2) dstAlpha3 = psAlpha(srcAlpha2, dstAlpha2)print("---- 0 ----") print(dstColor0 * 255) print(dstAlpha0 * 255)print("---- 1 ----") print(dstColor1 * 255) print(dstAlpha1 * 255)print("---- 2 ----") print(dstColor2 * 255) print(dstAlpha2 * 255)print("---- 3 ----") print(dstColor3 * 255) print(dstAlpha3 * 255)

總結

以上是生活随笔為你收集整理的Photoshop画笔的混合算法实现(逆推)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。