2012-05-07 87 views
2

我一直在使用Boost.GIL進行一些基本的圖像處理程序。在Boost.GIL,不同類型的像素之間的色空間轉換通過一通用convert_pixel()函數的模板特實現。 不過,我很想覆蓋基於LCMS的東西,比如這些實現。覆蓋專用模板

有什麼辦法可以重寫模板的專門化,以便任何內部呼叫convert_pixel()將使用新的基於LCMS的convert_pixel()

最後aswer

挖到GIL設計手冊(比教程更有趣),我發現的Adobe如何建議解決這個問題。對於那些我們感興趣,該鏈接提供了答案:http://www.boost.org/doc/libs/1_49_0/libs/gil/doc/html/gildesignguide.html#NewColorConversionDG

回答

0

我不熟悉的GIL,我發現只有在文檔中有類似的功能。但是,可能不需要回答這個問題。

劫持原來的電話,你應該能夠覆蓋的轉換。函數優先級應該是爲了節省一天:普通函數總是首選模板函數。假設原始模板專業化是

template<> 
GIL_FORCEINLINE void boost::gil::copy_and_convert_pixels (const V1 &src, const V2 &dst, CC cc) { original_code; } 

您可以覆蓋這個定義您的自定義非模板函數

GIL_FORCEINLINE void boost::gil::copy_and_convert_pixels (const V1 &src, const V2 &dst, CC cc) { overridden_code; } 

你應該特別注意定義函數到具有相同名稱相同的命名空間,並且還包括在第一次通話之前。

+0

不幸的是,雖然總的來說你的想法很好,但在這種特殊情況下它並不適用。實際上,顏色轉換依賴於boost/gil/color_convert.hpp中定義的類default_color_converter。 「訣竅」就在那裏,但我必須弄清楚如何取代它。儘管有新的挑戰很好。 – davideanastasia

0

FWIW,看到的首要boost::gil::color_convertthis answer for an example延伸至與尚未被GIL提供的轉換boost::gil::copy_and_convert_pixels行爲的目的。

我想你會遇到問題試圖替換現有的轉換定義在GIL的color_convert.hpp雖然;也許你想/路線需要往下走是定義一個新的色基c.f rgb_t,cmyk_t(例如一個lcms_t?),然後定義之類的東西default_color_converter_impl<rgb_t,lcms_t>與它進行互操作。

+0

lcms不是一個色彩空間,但它是用於色彩空間轉換管理的庫:http://www.littlecms.com/ – davideanastasia