Byakuren:一個 C 實現的主題色提取庫

原文地址: xcoder.in/2017/03/03/…node

很久沒發文章了,藉着 Byakuren 開源的檔口炒炒冷飯吧。git

先上 Repo 地址:github.com/XadillaX/by…github

主題色

圖像主題色是從一張圖像中提取出來最能表明這張圖片主色調的多種顏色。 也就是說在一幅色彩斑斕的圖片裏面,各類不一樣顏色的數量就對應着該顏色在圖 片中的比例,程序能夠經過計算圖片中不一樣顏色的像素數來算出主題色。算法

主題色提取算法

提取的算法在我以前的博客中有說明。在 Byakuren 中其實用的就是以前博客中講的一些算法。api

除去上面兩種算法, Byakuren 還提供了將這兩種算法結合起來的 Mix 算法。xcode

Byakuren

Byakuren 是我前兩年寫的一個主題色提取庫,也是繼 thmclrx 以後的 C 版實現,我的認爲代碼質量比舊版的 thmclrx 要高。而且它實際上通過了企業級的驗證,在某相關的公司已經歡快跑了有些年頭了。bash

在通過相關人員的贊成下,我也算把這雪藏了很久的代碼給開源出來了。ui

僞·Byakuren 是什麼?

byakuren

聖 白蓮(ひじり びゃくれん, Hiziri Byakuren )是系列做品《東方 project 》中的角色,首次登場於《東方星蓮船》。spa

  • 種族:魔法使
  • 能力:使用魔法程度的能力(酣暢加強身體能力的)
  • 危險度:不明
  • 人類友好度:中
  • 主要活動場所:命蓮寺之類
  • 命蓮寺的住持。雖然本來是人類,不過因爲常年的修行已經徹底超越了人類。如今已經屬於人們常說的魔法使了。

雖然已經入了佛門,可是不知道什麼緣由卻被妖怪敬仰着。她歷來沒有像童話故事中的魔法使那樣,唸誦着咒語治退妖怪。使用的力量徹底是邪惡的,一點都不像是聖人,雖然並無人目睹到她與人類爲敵,但其實已完全成爲妖怪的同伴了。code

好吧,總之本人是個東方控,因此基本上項目名都跟東方有關。

真·Byakuren 是什麼?

如文章題目所說,它是一個 C 實現的開源主題色提取的庫,你們能夠把它編譯成連接庫使用。

不過目前暫時只支持 Makefile 的形式來編譯,你們若是有興趣也能夠本身建個 Windows 下的 Visual Studio 項目等,也歡迎提相似於 CMake 之類的 PR 。

使用

其實詳細的使用方法在文檔中就有說明。

不過這裏仍是簡單介紹一下吧。

Clone

先把代碼給下下來,你也能夠把它 Clone 下來。總之倉庫地址是:github.com/XadillaX/by…

make

而後跑到目錄下執行 make

$ make byakuren複製代碼

你將獲得一個 byakuren.a 的靜態連接庫。

這個時候你只要拿着這個靜態連接庫,而後順便在你的項目中把頭文件引進來就能夠了。

#include "byakuren.h"複製代碼

API

咱們假設你有 bkr_rgb* rgb 的圖片像素信息,以及 uint32_t color_count 的圖片像素總數兩個變量,下面分別給出三個樣例。具體的 API 解析還請去文檔觀摩。

Octree
bkr_color_stats stats[256];
bkr_octree_node* root = bkr_build_octree(rgb, color_count, 256);
int colors = bkr_octree_calculate_color_stats(root, stats);
bkr_release_octree(root);複製代碼

colors 就是主題色數量了,傳進去的 stats 就會接收到主題色的具體信息了。

Min-diff
bkr_color_stats stats[256];
bkr_mindiff_parameter param;
param.gray_offset = 5;
param.palette = NULL;
int colors = bkr_mindiff_calculate_color_stats(rgb, color_count, stats, &param);複製代碼

colorsstats 如上所述。

Mix
bkr_color_stats stats[256];
bkr_mindiff_parameter param;
param.gray_offset = -1;
param.palette = NULL;
int colors = bkr_mix_calculate_color_stats(rgb, color_count, 256, &param, stats);複製代碼

colorsstats 如上所述。

預覽一下

可能有人想看看效果,我這裏就放個效果圖給你們看看吧。

其中 Octree 和 Mix 兩個算法的主題色最大數量參數傳的都是 16 。

效果預覽

能作什麼?

你能夠拿它來寫一些主題色提取的東西。

你也能夠拿它來完成其它語言的主題色提取庫的封裝,如 Python 、 Lua 等等。歡迎反饋給我。

結束語

把一份本身以爲還不錯的代碼開源出來的感受特爽,尤爲是這種重見天日的感受。ヘ|・∀・|ノ*~●

相關文章
相關標籤/搜索