 |
fig 1. 棄捐勿復道, 努力加餐飯。 |
這是我在 2002 寫的程式, 對透明色處理有興趣, 想自己寫出來, 找了很久, 忘記在哪本書看到這個演算法, 透過 linux/sgvalib 實做出來, 寫出來時還蠻開心的, 那時候用的版本控制軟體是 rcs。
對於電腦繪圖方式有興趣, 研究了 vga 模式和圖形顯示的原理, 如果用 qt 之類的, 很容易就可以完成秀出一張圖片的功能, 甚至還可以作到縮放, 但我想多知道一些, 就研究了這些技術, 大部分是從 dos 時代的繪圖相關書籍學習。
2002 沒有 chatgpt, 光是使用 jpeg lib 就難倒我, 啃著英文文件, 也不知道有沒看懂, 硬是讓我成功解出 jpeg 內容, 現在有 chatgpt, 應該秒會用吧!
在 20250804 想到 pc9801 遊戲 16 色時突然想到這個, 把這程式以 framebuffer 重新改寫, 沒辦法, svgalib 可能沒辦法在現今的平台執行, 呈現的效果看起來還蠻像一回事。
重新檢視演算法, 並沒有和背景色做運算, 我傻眼, 這好像不是透明演算法。問了
chatgpt 這個演算法, 還真的不是, chatgpt 說這是漸層演算法, 整整搞錯 23 年。
framebuffer 繪圖則是問 chatgpt, 節省不少時間。
由於在螢幕上顯示圖形非常複雜, 需要理解 vga 顯示模式和影像格式, 我挑了最簡單的方式做, 在 640x480 24bit color 上顯示 24bit jpeg 圖檔, 可以避開 Quantization + Dithering 的問題, 現在有 chatgpt, 比較容易找到這 2 個演算法, 23 年科技進步的太大了。
在 2025 年, 這些技術也不需要, 2025 年應該不會有 256 色的顯示模式了。
透明色公式是:
final = src_color * alpha + background_color * (1 - alpha);
重新挑戰透明色, 麻煩的是要怎麼取得背景圖, 就先不處理這個, 直接拿2張圖做透明計算。
拜 chatgpt 之強大, 透明效果沒花太多時間就完成, 這次應該就是透明效果了, 需要用底圖來計算。
List 2 L98 是透明演算法。
g++ fb-tran.cpp -o fb-tran -ljpeg
現在應該都是透過顯示卡來做透明效果, 很少會用 cpu 計算了。